С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/55: Рейтинг темы: голосов - 55, средняя оценка - 4.67
16 / 0 / 2
Регистрация: 10.11.2012
Сообщений: 117

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

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

Студворк — интернет-сервис помощи студентам
Добрый вечер!

Скажем я задекларировал в каком-то модуле функцию
C++
1
extern void foo() ;
. Но не описал её. Могу ли я при подключении этого модуля к моей программе описать тело этой функции в самой программе?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.07.2015, 00:01
Ответы с готовыми решениями:

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

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

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

11
 Аватар для jonson
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
05.07.2015, 00:19
можешь. extern там не нужен
1
16 / 0 / 2
Регистрация: 10.11.2012
Сообщений: 117
05.07.2015, 00:25  [ТС]
А как тогда сделать?
0
 Аватар для jonson
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
05.07.2015, 00:33
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;
}
1
16 / 0 / 2
Регистрация: 10.11.2012
Сообщений: 117
05.07.2015, 00:36  [ТС]
А если у меня есть функция в модуле, которая использует эту foo() ? Они тогда нормально работать будут?
0
 Аватар для jonson
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
05.07.2015, 00:38
но и fileH.h там чисто формально. При описании ты и так ее определяешь.
Цитата Сообщение от krazyd Посмотреть сообщение
у меня есть функция в модуле
в каком модуле?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
05.07.2015, 00:44
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
1
16 / 0 / 2
Регистрация: 10.11.2012
Сообщений: 117
05.07.2015, 00:50  [ТС]
jonson, В мною созданном.

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

Cra3y, а можете поподробнее рассказать про
C++
1
extern "C" int puts(const char*);
?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
05.07.2015, 00:56
krazyd, только вот просто extern перед функций писать не обязательно. Функция итак по умолчанию имеет внешнее связывание.
1
16 / 0 / 2
Регистрация: 10.11.2012
Сообщений: 117
05.07.2015, 00:57  [ТС]
DrOffset, вы имеете в виду если она в header указана?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
05.07.2015, 01:22
Цитата Сообщение от krazyd Посмотреть сообщение
а можете поподробнее рассказать
тут надо понимать как компилятор именует функции
в С++ типы параметров и возвращаемого значения входит в конечное имя функции
в Си функции распознаются только по имени
так вот чтобы в С++ вызвать функцию из Си библиотеки нужно явно указать, что эта функция именуется в стиле си
иначе компилятор оформит вызов как С++ и компоновщик не сможет ее найти, т.к. будет искать по полному имени.

jonson, в main.cpp происходит вызов функции bar(), описанной в some.cpp, а функция puts описана в стандартной библиотеке, но в main.cpp нет подключения заголовков через include
2
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
05.07.2015, 01:46
Цитата Сообщение от krazyd Посмотреть сообщение
вы имеете в виду если она в header указана?
имеется ввиду, что не надо писать extern в прототипе функции, т.к. функции по умолчанию extern:
C++
1
void foo() ; //это extern void foo() ;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.07.2015, 01:46
Помогаю со студенческими работами здесь

использование extern в си на пример исходников squid
здравствуйте. из-за некоторых фактов я запутался: возьмём пример с английской вики: file1: int GlobalVariable; // implicit...

Использование деклараций своей DLL по аналогией с функциями API
Подскажите, пожалуйста как можно использовать декларации функций и подпрограмм собственной динамической библиотеки ActiveX DLL в...

Что означает extern "C" или extern "C++"?
Например такой код, extern &quot;C&quot; void f(); Или C++ вместо C. Что это означает и где это применяется ?:)

В чем различие между функциями VBA и функциями Excel?
В чем различие между функциями VBA и функциями Excel. Скажите пожалуйста , в гугле не могу найти)

extern
Всем привет, читал сейчас библиотеку SDL и там встретил такой вот код: extern &quot;C&quot; { //... } Так вот...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru