如何解决我无法为g ++打印_cplusplus宏的值201703L
我正试图让我的编译器使用c ++版本17。这是我用来检查是否可以在g ++编译器中使用c ++ 17进行编译的代码段。
#include<iostream>
int main() {
if (__cplusplus == 201703L) std::cout << "C++17\n"; // ???
else if (__cplusplus == 201402L) std::cout << "C++14\n";
else if (__cplusplus == 201103L) std::cout << "C++11\n"; //g++ -std=c++11 check_cpp_version.cpp
else if (__cplusplus == 199711L) std::cout << "C++98\n"; //g++ check_cpp_version.cpp
else std::cout << "pre-standard C++\n";
}
此外,以下是以下命令的输出-
storm@storm:~$ g++ -v --help | grep "std"
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu
:
:
-std=c++17 This switch lacks documentation
-std=c++1y Deprecated in favor of -std=c++14
-std=c++1z Conform to the ISO 2017(?) C++ draft standard (experimental and incomplete support)
:
:
使用编译器语法的程序输出
storm@storm:~$ g++ -std=c++1z check_cpp_version.cpp -o check_cpp_version
storm@storm:~$ ./check_cpp_version
storm@storm:~$ pre-standard C++
storm@storm:~$ g++ -std=c++17 check_cpp_version.cpp -o check_cpp_version
storm@storm:~$ ./check_cpp_version
storm@storm:~$ pre-standard C++
在两种情况下我都无法打印出“ C ++ 17”。
有人可以指导我如何完成此工作吗?它是否需要更新编译器(即使它具有-std = c ++ 17开关)或其他软件包更新,还是我应该完全转到其他编译器?
================================================ ======================== 更新此问题
我要做的就是更新我使用此链接所做的gcc / g ++编译器- https://gist.github.com/jlblancoc/99521194aba975286c80f93e47966dc5
您可以关注评论并回答该问题以获得理解。
================================================ ========================
解决方法
您引用的输出中的重要部分:
符合ISO 2017(?)C ++标准草案(实验和不完整的支持)
您使用的编译器不完全支持C ++ 17。该编译器于2015年发布,比C ++ 17最终确定要早。
[{
__cplusplus
]打印出201500
在这种情况下,__cplusplus == 201703L
将不正确。
您需要使用支持C ++ 17的较新的编译器。在撰写本文时,GCC的最新发行版是10.2。我推荐这个版本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。