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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
krazyd
16 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 95
#1

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

05.07.2015, 00:01. Просмотров 763. Ответов 11
Метки нет (Все метки)

Добрый вечер!

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

Использование слова extern для структур - C++
В одном из файлов проекта задана структура: struct TMsgTV { int X,Y; char *Msg; } Далее была объявлена...

Использование static переменной через extern - C++
Есть форма, на ней две кнопки. Одна кнопка по нажатию добавляет элементы в класс-массив. Код первой клавиши: ...

Организация кода, вывод строки в консоли, использование extern - C++
Windows 7, Visual Studio 2013. В проекте файлы:// TestCpp.h using namespace std; extern settings set; bool TestCpp() { ...

extern - C++
Собственно как правильно пользоваться такой штукой? 1. Где нужно использовать: 1) только в заголовочном файле 2) только в исходном...

Extern в C/C++ - C++
Оговорка - собирал все под VS2015 и под него же с Clang'ом для убедительности. В первую очередь интересует актуальная для них информация,...

Extern template - C++
Не могу понять, в книге пишут: Примерно понимаю, при компиляции будет добавлен код определения шаблона в каждый файл где он...

директива extern - C++
Никак н могу понять как решить проблму с директивой extern. Я подключил к проекту файл libext.h и попытался скомпилировать программу. И...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jonson
232 / 205 / 61
Регистрация: 18.03.2010
Сообщений: 749
05.07.2015, 00:19     Использование extern с функциями #2
можешь. extern там не нужен
krazyd
16 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 95
05.07.2015, 00:25  [ТС]     Использование extern с функциями #3
А как тогда сделать?
jonson
232 / 205 / 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
Сообщений: 95
05.07.2015, 00:36  [ТС]     Использование extern с функциями #5
А если у меня есть функция в модуле, которая использует эту foo() ? Они тогда нормально работать будут?
jonson
232 / 205 / 61
Регистрация: 18.03.2010
Сообщений: 749
05.07.2015, 00:38     Использование extern с функциями #6
но и fileH.h там чисто формально. При описании ты и так ее определяешь.
Цитата Сообщение от krazyd Посмотреть сообщение
у меня есть функция в модуле
в каком модуле?
Max Dark
шКодер самоучка
1813 / 1614 / 588
Регистрация: 09.10.2013
Сообщений: 3,618
Записей в блоге: 6
Завершенные тесты: 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
Сообщений: 95
05.07.2015, 00:50  [ТС]     Использование extern с функциями #8
jonson, В мною созданном.

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

Cra3y, а можете поподробнее рассказать про
C++
1
extern "C" int puts(const char*);
?
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
05.07.2015, 00:56     Использование extern с функциями #9
krazyd, только вот просто extern перед функций писать не обязательно. Функция итак по умолчанию имеет внешнее связывание.
krazyd
16 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 95
05.07.2015, 00:57  [ТС]     Использование extern с функциями #10
DrOffset, вы имеете в виду если она в header указана?
Max Dark
шКодер самоучка
1813 / 1614 / 588
Регистрация: 09.10.2013
Сообщений: 3,618
Записей в блоге: 6
Завершенные тесты: 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++
что будет если не написать extern,если можно с примерами

( extern char ) переопределение; - C++
Здравствуйте. В file.cpp использую: char *SOUND_TRAPPED = { &quot;zbm4/zombi_trapped.wav&quot;, // male ...

Ключевое слово extern - C++
Есть код в файле file1.cpp #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; #include &quot;file2.cpp&quot; int main() { ...

Проблема с extern-переменными - C++
Такие дела. У меня два файла, func.cpp и main.cpp //func.cpp double sum, count; double average(double num) { sum += num; ...

Подключение файлов через extern - C++
пишу такую фигню //HH2.cpp #include &quot;mouse.h&quot; int main() { HWND hWnd = NULL;


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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,050
Записей в блоге: 3
Завершенные тесты: 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 с функциями
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru