Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I'm working on a Linux machine. Is there any system command to find the standard followed by the C compiler I'm using?

like image 675
Hemanth Avatar asked Feb 14 '11 11:02

Hemanth


People also ask

How do I check my gcc standard?

In the case of gcc , you can tell the compiler what C standard to use via the --std option. Running man gcc will explain this, and will list all of the standards that are supported.

How do I find my compiler version?

Type “gcc –version” in command prompt to check whether C compiler is installed in your machine. Type “g++ –version” in command prompt to check whether C++ compiler is installed in your machine. But, we are good if C compiler is installed successfully in our machine as of now.

How do I find gcc version in Windows?

Just use g++ -v or gcc -v which will give you your compiler version. You can also go to your windows settings, click on "Apps" go to the search bar and search up c++ scroll down to the last item, and click on it.


2 Answers

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.

like image 119
Tarantula Avatar answered Sep 18 '22 06:09

Tarantula


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 
like image 31
Flexo Avatar answered Sep 20 '22 06:09

Flexo