Форум программистов, компьютерный форум CyberForum.ru

Использование extern с функциями - C++

Восстановить пароль Регистрация
 
krazyd
16 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 88
05.07.2015, 00:01     Использование extern с функциями #1
Добрый вечер!

Скажем я задекларировал в каком-то модуле функцию
C++
1
extern void foo() ;
. Но не описал её. Могу ли я при подключении этого модуля к моей программе описать тело этой функции в самой программе?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2015, 00:01     Использование extern с функциями
Посмотрите здесь:

директива extern C++
Проблема с extern-переменными C++
C++ ( extern char ) переопределение;
Не работает глобальный идентификатор extern C++
C++ что такое extern?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jonson
 Аватар для jonson
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
05.07.2015, 00:19     Использование extern с функциями #2
можешь. extern там не нужен
krazyd
16 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 88
05.07.2015, 00:25  [ТС]     Использование extern с функциями #3
А как тогда сделать?
jonson
 Аватар для jonson
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
05.07.2015, 00:33     Использование extern с функциями #4
fileH.h
C++
1
void foo() ;
fileCPP.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include "fileH.h"
 
void foo()
{
    std::cout << "my function foo()";
}
 
int main ()
{
    foo();  
    system("pause");
    return 0;
}
krazyd
16 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 88
05.07.2015, 00:36  [ТС]     Использование extern с функциями #5
А если у меня есть функция в модуле, которая использует эту foo() ? Они тогда нормально работать будут?
jonson
 Аватар для jonson
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
05.07.2015, 00:38     Использование extern с функциями #6
но и fileH.h там чисто формально. При описании ты и так ее определяешь.
Цитата Сообщение от krazyd Посмотреть сообщение
у меня есть функция в модуле
в каком модуле?
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
05.07.2015, 00:44     Использование extern с функциями #7
some.cpp
C++
1
2
3
4
extern void foo();
void bar() {
    foo();
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
extern void bar();
extern "C" int puts(const char*);
void foo() {
    puts("test");
}
int main() {
    bar();
    return 0;
}
extern говорит что символ будет описан в другом модуле, а в каком именно - на этапе компиляции не важно
главное чтобы на этапе компоновки все нашлось

Добавлено через 2 минуты
PS: собирается это следующими командами
Bash
1
2
3
g++ -c some.cpp
g++ -c main.cpp
g++ some.o main.o -o test_extern
krazyd
16 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 88
05.07.2015, 00:50  [ТС]     Использование extern с функциями #8
jonson, В мною созданном.

Cra3y, благодарю!

Cra3y, а можете поподробнее рассказать про
C++
1
extern "C" int puts(const char*);
?
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
05.07.2015, 00:56     Использование extern с функциями #9
krazyd, только вот просто extern перед функций писать не обязательно. Функция итак по умолчанию имеет внешнее связывание.
krazyd
16 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 88
05.07.2015, 00:57  [ТС]     Использование extern с функциями #10
DrOffset, вы имеете в виду если она в header указана?
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
05.07.2015, 01:22     Использование extern с функциями #11
Цитата Сообщение от krazyd Посмотреть сообщение
а можете поподробнее рассказать
тут надо понимать как компилятор именует функции
в С++ типы параметров и возвращаемого значения входит в конечное имя функции
в Си функции распознаются только по имени
так вот чтобы в С++ вызвать функцию из Си библиотеки нужно явно указать, что эта функция именуется в стиле си
иначе компилятор оформит вызов как С++ и компоновщик не сможет ее найти, т.к. будет искать по полному имени.

jonson, в main.cpp происходит вызов функции bar(), описанной в some.cpp, а функция puts описана в стандартной библиотеке, но в main.cpp нет подключения заголовков через include
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2015, 01:46     Использование extern с функциями
Еще ссылки по теме:

extern C++
C++ Организация кода, вывод строки в консоли, использование extern
Использование static переменной через extern C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
05.07.2015, 01:46     Использование extern с функциями #12
Цитата Сообщение от krazyd Посмотреть сообщение
вы имеете в виду если она в header указана?
имеется ввиду, что не надо писать extern в прототипе функции, т.к. функции по умолчанию extern:
C++
1
void foo() ; //это extern void foo() ;
Yandex
Объявления
05.07.2015, 01:46     Использование extern с функциями
Ответ Создать тему
Опции темы

Текущее время: 15:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru