查看C和C++编译器支持标准

查看C编译器版本(和其他默认宏定义)

Windows:

1
2
3
gcc -E -dM -x c NUL > gccstd.hh
: 或
gcc -E -dM - < NUL > gccstd.hh

Linux:

gcc -E -dM -x c /dev/null > gccstd.hh 
# 
gcc -E -dM - < /dev/null > gccstd.hh

注:gcc无法自动识别NUL/dev/null类型,因此要加上-x c参数

打开gccstd.hh查找__STDC_VERSION__,其值定义如下:

__STDC_VERSION__ 标准
未定义 C89 / C90
199901L C99
201112L C11
201710L C17
202000L C2X
202311L C23

直接显示__STDC_VERSION__

Windows:

1
2
> gcc -E -dM -x c NUL | findstr /I /c:"__STDC_VERSION__"
#define __STDC_VERSION__ 201710L

Linux:

$ gcc -E -dM -x c /dev/null | grep -F __STDC_VERSION__
#define __STDC_VERSION__ 201112L

查看C++编译器版本(和其他默认宏定义)

Windows:

1
gcc -x c++ -E -dM NUL > g++std.hh

Linux:

gcc -E -dM -x c++ /dev/null > g++std.hh

打开gccstd.hh查找__cplusplus,其值定义如下:

__cplusplus 标准
199711L C++98 / C++03
201103L C++0x / C++11
201402L C++1y / C++14
201703L C++1z / C++17
202002L C++2a / C++20
202100L C++23

直接显示__cplusplus

Windows:

1
2
> gcc -E -dM -x c++ NUL | findstr /I /c:"__cplusplus"
#define __cplusplus 201703L

Linux:

$ gcc -E -dM -x c++ /dev/null | grep -F __cplusplus
#define __cplusplus 201402L

补充说明

表格中的内容来源于[1]的总结,更多总结详见[2]。

参考

  1. Language Standards Supported by GCC
  2. Pre-defined Compiler Macros - Language Standards
    predef/Standards.md