Имеет ли extern "C" какой-либо эффект в C?
Я просто получил код C, который использует extern "C" для объявления внешних функций следующим образом:
extern "C" void func();
Действительно ли это C? Я получаю сообщение об ошибке в этой строке, но я не уверен, что из-за этого или чего-то еще.
Ответы
Ответ 1
Нет, он недействителен C. Он должен использоваться только в коде С++ для обозначения функций, определенных в коде C. extern "C"
должен быть окружен блоком ifdef __cplusplus
/#endif
:
// For one function
#ifdef __cplusplus
extern "C"
#endif
void func();
// For more than one function
#ifdef __cplusplus
extern "C"
{
#endif
void func1();
void func2();
#ifdef __cplusplus
}
#endif
Ответ 2
это обозначение С++, чтобы сообщить компилятору/компоновщику использовать стандарты вызова C.
Обычно эта строка завершается в предпроцессорном заявлении.
#ifdef __cplusplus
extern "C" {
#endif
// stuff
#ifdef __cplusplus
}
#endif
Ответ 3
Недействителен в C. Если он присутствует после предварительной обработки, это приведет к диагностике в соответствии со стандартом.
Для С++ это превращение имен. Подробнее см. , чтобы узнать, почему это может потребоваться. Можете ли вы опубликовать несколько подробностей?