The code below contains standard, pre-defined macros used at runtime to determine whether a C or C++ compiler was used to compile the code. For C compilers, it also determines the version of the C language standard that the compiler implements).
NOTE: Some people prefer to use STDC_HEADERS rather than __STDC__..
#ifdef __cplusplus printf("C++ compiler
");#else#ifdef __STDC__#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) ||/*continue.. ...on the next line */ (defined(__GNUC__) && !defined(__STRICT_ANSI__)) printf("ANSI X3.159-1999 / ISO 9899:1999 (C99) compiler
");#else printf("ANSI X3.159-1989 (C89) / ISO/IEC 9899:1990 (C90) C compiler
");#endif#else printf("Pre-ANSI (K&R) C compiler
");#endif#endif
The code below determines whether a C or C++ compiler was used to compile the code at runtime:
if (sizeof('c') != sizeof(int)) printf("C++ compiler
");else if ((unsigned char)1 < -1) printf("Pre-ANSI (K&R) C compiler
");else { int i; i = 1 //* */ +1;if (i == 2) printf("ANSI X3.159-1999 / ISO 9899:1999 (C99) compiler
");else printf("ANSI X3.159-1989 (C89) / ISO/IEC 9899:1990 (C90) C compiler
");}