GCC
- 参考gcc官方网站和发行说明信息,搜索”default for C code“或”default for C++ code“.
- man gcc搜索"default for C code"或"default for C++ code".
- 利用-dM -E参数获取
g++ -dM -E -x c++ /dev/null | grep -F __cplusplus
- g++ 11.4.0输出的结果#define __cplusplus 201703L,代表默认C++17.
gcc -dM -E -x c /dev/null | grep -F STDC_VERSION
- gcc 11.4.0输出的结果define STDC_VERSION 201710L,即代表默认C17.
- 也可加入-std=xxx选项来检测:gcc -dM -E -x c -std=c11 /dev/null | grep -F STDC_VERSION会得到201112L.
代码中,可以用__STDC_VERSION__宏(C99之前不支持)和__cplusplus宏判断编译器支持的C标准和C++标准版本。
- C99标准的值为199901L,C11标准的值为201112L,C17标准的值为201710L.
- C++98标准的值为199711L,C++11标准的值为201103L,C++14标准的值为201402L,C++17标准的值为201703L,C++20标准的值为202002L.