2013-04-24 39 views
6

tôi vẫn phải vật lộn để biên dịch một giao diện điều khiển ứng dụng C, thủ tục biên soạn vẫn thất bại với lỗi dưới đây:extern "C" lỗi # 2040: dự kiến ​​một định danh

"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 

dưới khai báo của hàm extern trên mã C:

extern "C" void TreatReceivedSignal(int NoSignal) ; 

tôi đang sử dụng HP-UX acc biên dịch [HP C/AC++ B3910B A.06.26], tôi cũng bật cờ biên soạn -Ae cho phép hỗ trợ C99. Dường như trình biên dịch không thể nhận ra 'extern' C '' là từ dành riêng cho C, có thể cần một số cờ biên dịch khác. Bất kỳ ý tưởng nào có thể giải quyết vấn đề này? Cảm ơn bạn rất nhiều trước. Kính trọng

+0

C và C++ không phải là * tương tự *. Đừng đối xử với họ như thể họ đang có. Tìm hiểu một, hoặc tìm hiểu khác. Đừng học chúng cùng một lúc. Không viết mã C cho mục đích được "compilable as C++". Có nhiều lý do tại sao đó là một ý tưởng tồi. Viết bằng C hoặc viết bằng C++. Nếu bạn muốn liên kết mã C với một dự án C++, hãy biên dịch mã C bằng trình biên dịch C và sử dụng trình liên kết C++ của bạn để liên kết mã đối tượng. – Sebivor

Trả lời

12

Cấu trúc extern "C" là C++, không thể sử dụng trong C. Và trình biên dịch xử lý tệp nguồn của bạn dưới dạng tệp nguồn C vì tệp có phần mở rộng .c.

Điều phổ biến nhất để làm là sử dụng tiền xử lý để có điều kiện bổ sung này cho sưu tập C++:

#ifdef __cplusplus 
extern "C" { 
#endif 

/* Standard C prototypes */ 

#ifdef __cplusplus 
} 
#endif 
+0

như tôi biết nó C và C + + phương pháp có thể được sử dụng trên cả hai ngôn ngữ bằng cách sử dụng cơ chế liên kết – jamel

+0

@ jamel Bạn có thể sử dụng chức năng từ cả C và C++, đó là 'extern" C "' điều trình biên dịch là phàn nàn về . Cấu trúc đó không có trong ngôn ngữ C. –

+0

vâng tôi không biết tại sao nó là compalining, tuy nhiên tôi biên dịch cùng một ứng dụng với một phiên bản cũ của ACC! phiên bản này có thể cần một số cờ bổ sung để được thiết lập trong quá trình biên soạn! – jamel

Các vấn đề liên quan