关于C++编译器是否支持C++11的检查:
最近的项目需要编译器支持C++11,文档上说可以支持C++11,至于是否支持,总要自己验证一下,才能放心。哎,没法,强迫症...
于是查了资料后写了个程序来验证:
int main(int argc, char *argv[])
{
#if __cplusplus >= 201103L
printf("C++11 suppuorts...\n");
#endif
std::cout << __cplusplus << std::endl;
return 0;
}
编译:
arm-linux-guneabi-g++ -o demo_cpp11 demo.cpp -std=c++11 // 编译后程序输出:201103
arm-linux-guneabi-g++ -o demo demo.cpp // 编译后程序输出:199711
如果是C编译器,使用-std=c11
另外,对于不支持C++11的编译器,如果指定命令:-std=c++11,会提示错误 :未识别的编译参数-std=c++11
以下为参考:
使用以下语句进行确定编译器是否支持C++11
std::cout << __cplusplus;
查看输出结果,若为201103则表明支持;为199711则表明不支持。
原因:
#define __cplusplus 201103L // C++11,源文件定义
#define __cplusplus 197711L // C++11之前,源文件定义
https://blog.csdn.net/qq_35976351/article/details/79673352:
linux g++开启C++11/14支持
sudo vim ~/.bashrc
在some more ls aliases
注释块的地方添加下面这两行:
alias g++11='g++ -g -Wall -std=c++11'
alias g++14='g++ -g -Wall -std=c++14'
相当于用别名的方式,简化输入。在编译的时候,仅需要输入g++11
或者 g++14
即可。
扩展:
C++0x 代表 C++11 版本
C++1y 代表 C++14 版本
C++1z 代表 C++17 版本
C++2a …
编译选项C++版本代号而已
比如说 CMakeList.txt 配置C++11版本编译:
set(CMAKE_CXX_FLAGS -std=c++0x)
配置C++14版本:
set(CMAKE_CXX_FLAGS -std=c++1y)
配置C++17版本:
set(CMAKE_CXX_FLAGS -std=c++1z)
c++0x/1y/1z是一个标准草案,参考名称,正经应该使用c++11/14/17