2010-01-22 12 views
21

Tôi muốn làm điều gì đó trong C99 một cách, nếu không để thực hiện theo cách khác. #define là gì để kiểm tra?Có #define cho C99 không?

#ifdef C99 
... 
#else 
... 
#endif 
+1

Thuật ngữ nitpick: Điều gì mới gọi là #define, gurus gọi macro * hoặc (* macro mã định danh * khi chúng cụ thể tham chiếu đến thingy cần được thay thế). – Jens

Trả lời

32

Không có giá trị #define cụ thể. Chỉ cần kiểm tra __STDC_VERSION__ và tự xác định! ;-)

#if __STDC_VERSION__ >= 199901L 
/* C99 code */ 
#define C99 
#else 
/* Not C99 code */ 
#endif 


#ifdef C99 
/*My code in C99 format*/ 
#else 
/*My code in C99 format*/ 
#endif 

EDIT: Một đoạn tổng quát hơn, from here. Tôi vừa mới thay đổi tên đã xác định, chỉ trong trường hợp bạn sẽ sử dụng chúng rất nhiều trên mã:

#if defined(__STDC__) 
# define C89 
# if defined(__STDC_VERSION__) 
# define C90 
# if (__STDC_VERSION__ >= 199409L) 
# define C94 
# endif 
# if (__STDC_VERSION__ >= 199901L) 
# define C99 
# endif 
# endif 
#endif 
+0

Có thể đã thêm một thử nghiệm cho C11 ngay bây giờ. – chux

23
#if __STDC_VERSION__ == 199901L 
/* C99 */ 
#else 
/* not C99 */ 
#endif 

Thay đổi ==->= nếu bạn muốn kiểm tra cho C99 và sau đó.