2013-04-24 3 views
6

я до сих пор пытаюсь составить консольное приложение C, процедура компиляции еще не удается с ошибкой ниже:ехЬегпа «C» ошибка # 2040: ожидался идентификатор

"Main.c", line 51: error #2040: expected an identifier 
    extern "C" void TreatReceivedSignal(int NoSignal) ; 
     ^
1 error detected in the compilation of "Main.c". 
gmake: *** [Main.o] Error 2 

ниже декларации экстерна методики на код C:

extern "C" void TreatReceivedSignal(int NoSignal) ; 

Я использую HP-UX AcC компилятор [HP C/AC++ B3910B A.06.26], и я переключился на компиляции флаг -æ включить поддержку C99. Кажется, что компилятор не может распознать «extern» C «'как зарезервированное слово C, может быть установлен некоторый другой флаг компиляции. Любая идея, пожалуйста, может решить эту проблему? Спасибо вам большое заблаговременно. С уважением

+0

C и C++ не * похоже *. Не обращайся с ними так, как будто они есть. Изучайте или изучайте другое. Не изучайте их одновременно. Не пишите C-код с целью «компилироваться как C++». Есть много причин, почему это плохая идея. Напишите в C или напишите на C++. Если вы хотите связать код C с проектом C++, скомпилируйте C-код с компилятором C и используйте свой C++-компоновщик для связывания объектного кода. – Sebivor

ответ

12

extern "C" конструктом C++ определенной вещи, она не может быть использована в C. И компилятор обрабатывает исходный файл в качестве исходного C-файла, так как он имеет расширение .c.

Наиболее распространенная вещь, чтобы сделать, это использовать препроцессор условно добавить это для компиляции C++:

#ifdef __cplusplus 
extern "C" { 
#endif 

/* Standard C prototypes */ 

#ifdef __cplusplus 
} 
#endif 
+0

, так как я знаю, что метод C и C++ может использоваться на обоих языках с использованием механизма привязки – jamel

+0

@jamel Вы можете использовать эту функцию как из C, так и из C++, это 'extern 'C", что компилятор жалуется на , Эта конструкция не находится на языке C. –

+0

Да, я не знаю почему это компилирует, однако я скомпилировал то же приложение со старой версией aCC! этой версии, возможно, потребуется дополнительный флаг, который будет установлен во время компиляции! – jamel

Смежные вопросы