2010-01-22 20 views
21

Voglio fare qualcosa in C99 in un modo, altrimenti eseguirlo in un altro modo. Che cosa è il #define da verificare?Esiste un #define per C99?

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

Terminologia nitpick: Che neofiti chiamano una #define, i guru chiamano * macro * o (* macro identificatore * quando si riferiscono specificamente al thingy che dovrebbe essere sostituito). – Jens

risposta

32

Non esiste un valore specifico #define. Basta controllare __STDC_VERSION__ e definirlo da solo! ;-)

#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: Un frammento di più generale, from here. Ho appena cambiato i nomi definiti, nel caso in cui lo userete loro un sacco sul codice:

#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

Potrebbe aggiungere un test per C11 ora. – chux

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

Change ==->= se si vuole testare per la C99 e versioni successive.