Влияет ли extern "C" на C? - PullRequest
       31

Влияет ли extern "C" на C?

14 голосов
/ 05 апреля 2009

Я только что получил код C, который использует extern "C" для объявления внешних функций, таких как:

extern "C" void func();

Это действительный C? Я получаю сообщение об ошибке в этой строке, но я не уверен, что это из-за этого или чего-то еще.

Ответы [ 3 ]

30 голосов
/ 05 апреля 2009

Нет, это недопустимый C. Он должен использоваться только в коде 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
12 голосов
/ 05 апреля 2009

это нотация C ++, указывающая компилятору / компоновщику использовать стандарты вызова C.

Обычно эта строка заключена в оператор препроцессора.

#ifdef __cplusplus
extern "C" {
#endif

// stuff

#ifdef __cplusplus
}
#endif
2 голосов
/ 05 апреля 2009

Недействительно в C. Если присутствует после предварительной обработки, это приведет к диагностике в соответствии со стандартом.

Для C ++ это повороты именования. См. this для более подробной информации о том, почему это может потребоваться. Можете ли вы опубликовать более подробную информацию?

...