|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
Что означает extern "C" или extern "C++"?25.08.2017, 16:45. Показов 90979. Ответов 34
Метки нет (Все метки)
0
|
|
| 25.08.2017, 16:45 | |
|
Ответы с готовыми решениями:
34
что такое extern? Опишите функцию extern в Си, её аргументы, назначение и что возвращае Что значит #define AZAC_EXTERN_C extern "C" |
|
44 / 44 / 19
Регистрация: 04.05.2014
Сообщений: 190
|
|
| 25.08.2017, 16:58 | |
|
В общем случае, extern означает, что функция, класс или переменная будет доступна по её имени для использования из другого компонента программы. Добавление "C" и "С++" указывает на то, в каком виде экспортировать имена объектов (в совместимом с языком Си или нет).
1
|
|
|
|
|
| 25.08.2017, 17:03 | |
|
Разница только в том, с каким именем создастся метка в коде
Так: C++ extern void qqq (void); void foo (void) { qqq (); } Code $ g++ t.cc -S $ cat t.s ... call _Z3qqqv ... C++ extern "C" void qqq (void); void foo (void) { qqq (); } Code $ g++ t.cc -S $ cat t.s ... call qqq ...
4
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 25.08.2017, 17:54 [ТС] | |
|
Evg,
Почти ничего не понял ![]() Какая разница как функция называется в ассемблере? Как это мешает выполняться коду который соответствует этой функции? Всмысле написать программу исходники которой писаны на си и с++? Компилятор же при компиляции одновременно не использует два стандарта... Он либо компилит код по определённому стандарту си, либо с++(или не так?).
0
|
|
|
Неэпический
|
|
| 25.08.2017, 18:22 | |
|
Undisputed, такая, что когда захочешь, например,
из dll вызвать функцию foo, обнаружишь, что она называется impl@hodrhodr#@hdgst_foo,а посему о хватишь оши ку undefined reference, потому что манглинг имен в твоём компиляторе работает не так как в том, в котором библиотека собиралась.
1
|
|
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
|
||
| 25.08.2017, 18:29 | ||
|
2
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 25.08.2017, 18:30 [ТС] | |
|
Croessmah,
То есть речь уже о скомпилированной библиотеки которая подключается в коде? (Прагмой вроде). Т.е насколько я понял если мне хочется использовать функцию из сишной либы, я пишу extern "C" имя функции, далее плюсовый компилятор преобразует это имя функции в то как если бы мы компилировали сишный а не плюсовый код. Таким образом получится вызвать функцию из заранее скомпилированной сишный либы. И это весь смысл extern "C"?
0
|
|
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
|
||
| 25.08.2017, 18:37 | ||
|
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 25.08.2017, 18:46 [ТС] | |
|
nd2,
Вы меня ещё больше запутали если extern "C" не преобразует название функции в си-стиль, тогда что оно делает и зачем нужно?Перегруженные функции и без extern ведь можно использовать...
0
|
|
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
|
|||
| 25.08.2017, 18:57 | |||
|
1
|
|||
|
|
||
| 25.08.2017, 19:01 | ||
|
C++ /* Файл t1.cpp */ extern void foo (void); int main (void) { foo(); return 0; } C /* Файл t2.c */ void foo (void) { } Code $ g++ t1.cpp -c $ gcc t2.c -c $ g++ t1.o t2.o t1.o:t1.cc:(.text+0xc): undefined reference to `foo()' collect2: ошибка: выполнение ld завершилось с кодом возврата 1
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 25.08.2017, 19:03 [ТС] | |
|
nd2,
А... Для сишных функций преобразования не требуется, а для плюсовых требуется. Поэтому extern "C" говорит плюсовому компилятору не коверкать имя функции(как эти делается в случае когда компилился сишный код). Понял, спасибо! Только не попятно зачем тогда в с++ extern "C++" ведь оно и так по умолчанию будет делать преобразования. Или нет?
1
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 25.08.2017, 19:04 [ТС] | |
|
Evg,
Да, уже понял) Спасибо!
0
|
|
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
|
|
| 25.08.2017, 19:04 | |
|
1
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 25.08.2017, 19:07 [ТС] | |
|
nd2,
Ну видел примеры когда пишут extern "C++". Это зачем нужно, если у нас и так плюсовый компилятор и названия функций будут генериться по плюсовым соглашениям?
0
|
|
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
|
||
| 25.08.2017, 19:09 | ||
|
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 25.08.2017, 19:45 [ТС] | |
|
nd2,
Просто когда пишется в плюсовом коде extern "C++" void foo(); Не понимаю зачем это нужно...
0
|
|
|
Любитель чаепитий
|
|
| 25.08.2017, 19:54 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 25.08.2017, 19:56 [ТС] | |
|
GbaLog-,
Так если в сишном файле есть плюсовый код то компилятор си его не скомпилит же...
0
|
|
|
|
|
| 25.08.2017, 20:00 | |
|
Ссылка из поста #18 описывает некую формальную сторону вопроса. Но я как-то не могу сообразить, в каких случаях реально такое может оказаться востребованным. Кроме каких-то синтетических надуманных случаев в голову ничего не приходит
0
|
|
| 25.08.2017, 20:00 | |
|
Помогаю со студенческими работами здесь
20
extern
директива extern
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
|
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,
. . .
|