2010-12-30 36 views
7

Tôi có nghi ngờ về nhiều điều liên quan đến các thông số kỹ thuật C khác nhau.Có thể kết hợp mã C89 với mã C99?

Nếu tôi lập trình một thư viện trong C99, tôi có thể sử dụng nó từ mã C89 không? (chỉ sử dụng các hàm có định nghĩa tương thích C89).

ví dụ, mã này có thể sử dụng được trong C89?

Tiêu đề của một thư viện chia sẻ:

 

#ifdef C99 
void func (double complex a, double complex b); // C99 function 
#endif 

/* another C89 compliant function */ 
void func2 (double a, double b); 
 

Cảm ơn trước :)

+0

Có thể miễn là bạn '#define C99' chính xác. Xem http://stackoverflow.com/questions/2115867/is-there-a-define-for-c99 – BoltClock

+0

"phức tạp" là gì? –

+0

@BoltClock Tôi đã thấy nó: p, nhưng câu hỏi của tôi hướng đến khả năng tương thích nhị phân của các thư viện C99 với các chương trình C89. – castarco

Trả lời

7

Ngôn ngữ C không nói bất cứ điều gì về tính tương thích nhị phân của C89 và C99 mã. Điều đó hoàn toàn phụ thuộc vào các trình biên dịch bạn sử dụng cho các phần khác nhau của tệp thực thi.

Nếu bạn có thể làm cho các tiêu đề bên ngoài thư viện của bạn ngon miệng cho trình biên dịch C89, tôi không thấy bất kỳ lý do rõ ràng nào tại sao nó không hoạt động, ngoại trừ vấn đề thông thường đảm bảo rằng hai trình biên dịch có thể tạo mã tương thích.

+0

Đây là câu trả lời đúng. – Joshua

2

Thay vì #ifdef C99, hãy sử dụng #if __STDC_VERSION__ > 199900L hoặc tương tự.

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