2009-04-04 35 views
13

Tôi chỉ có một số mã C có sử dụng extern "C" để khai báo các chức năng bên ngoài như thế này:Liệu extern "C" có bất kỳ tác dụng trong C?

extern "C" void func(); 

là C có giá trị này? Tôi nhận được một lỗi ở dòng này, nhưng tôi không chắc chắn nếu đó là vì điều này hay cái gì khác.

Trả lời

29

Không, không hợp lệ C. Chỉ nên sử dụng mã C++ để tham chiếu đến các hàm được xác định trong mã C. Các extern "C" nên được bao bọc trong một khối 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 
11

đây là một C++ ký hiệu để nói với trình biên dịch/mối liên kết để sử dụng tiêu chuẩn gọi C.

Thông thường, dòng đó được bao bọc trong câu lệnh tiền xử lý.

#ifdef __cplusplus 
extern "C" { 
#endif 

// stuff 

#ifdef __cplusplus 
} 
#endif 
2

Không hợp lệ trong C. Nếu hiện tại sau khi xử lý trước điều này sẽ dẫn đến chẩn đoán theo tiêu chuẩn.

Đối với C++, thao tác này sẽ biến tên mangling. Xem this để biết thêm chi tiết về lý do tại sao nó có thể được yêu cầu. Bạn có thể đăng thêm một số chi tiết không?

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