Имеет ли 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. Если он присутствует после предварительной обработки, это приведет к диагностике в соответствии со стандартом.

Для С++ это превращение имен. Подробнее см. , чтобы узнать, почему это может потребоваться. Можете ли вы опубликовать несколько подробностей?