Я только что получил код C, который использует extern "C" для объявления внешних функций, таких как:
extern "C" void func();
Это действительный C? Я получаю сообщение об ошибке в этой строке, но я не уверен, что это из-за этого или чего-то еще.
Нет, это недопустимый C. Он должен использоваться только в коде C ++ для ссылки на функции, определенные в коде C. extern "C" должен быть заключен в блок ifdef __cplusplus / #endif:
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
это нотация C ++, указывающая компилятору / компоновщику использовать стандарты вызова C.
Обычно эта строка заключена в оператор препроцессора.
#ifdef __cplusplus extern "C" { #endif // stuff #ifdef __cplusplus } #endif
Недействительно в C. Если присутствует после предварительной обработки, это приведет к диагностике в соответствии со стандартом.
Для C ++ это повороты именования. См. this для более подробной информации о том, почему это может потребоваться. Можете ли вы опубликовать более подробную информацию?