2020-12-15

关于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值