奇思妙想 · 2024年 3月 31日 0

如何知道当前编译器默认C/C++标准是多少?

133 次浏览

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.

如何获取预处理器定义了哪些宏?