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

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

05.07.2015, 00:01. Показов 10787. Ответов 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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru