How to find my current compiler's standard, like if it is C90, etc How to find my current compiler's standard, like if it is C90, etc c c

How to find my current compiler's standard, like if it is C90, etc


This is compiler dependent, I'm supposing you're using GCC.You could check your compiler defined macros using:

gcc -dM -E - < /dev/null

Check the manual about the flags, specially:

__STDC_VERSION__

This macro expands to the C Standard's version number, a long integer constant of the form yyyymmL where yyyy and mm are the year and month of the Standard version. This signifies which version of the C Standard the compiler conforms to. Like STDC, this is not necessarily accurate for the entire implementation, unless GNU CPP is being used with GCC.

The value 199409L signifies the 1989 C standard as amended in 1994, which is the current default; the value 199901L signifies the 1999 revision of the C standard. Support for the 1999 revision is not yet complete.

This macro is not defined if the -traditional-cpp option is used, nor when compiling C++ or Objective-C.

In this site you can find a lot of information about this. See the table present here.


You can also test this in your code using standard macros, for example (originally from sourceforge project of the same name):

#if defined(__STDC__)# define PREDEF_STANDARD_C_1989# if defined(__STDC_VERSION__)#  define PREDEF_STANDARD_C_1990#  if (__STDC_VERSION__ >= 199409L)#   define PREDEF_STANDARD_C_1994#  endif#  if (__STDC_VERSION__ >= 199901L)#   define PREDEF_STANDARD_C_1999#  endif#  if (__STDC_VERSION__ >= 201710L)#   define PREDEF_STANDARD_C_2018#  endif# endif#endif

If you want to check this from the command line you can pick one (e.g. c89) and check the return value from a minimal program:

echo -e "#ifdef __STDC__\n#error\n#endif"|gcc -xc -c - > /dev/null 2>&1; test $? -eq 0  || echo "c89


At compile time, check against preprocessor macro:

  • __ANSI__
  • __STDC__
  • __STDC_VERSION__ >= 199901L for c99