有没有办法让gcc/g ++从命令行转储它的预处理器定义?我的意思是__GNUC__,__STDC__等等.
当我要求查看cc的当前版本时,我得到了这个.
$ cc --version
cc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$
Run Code Online (Sandbox Code Playgroud)
我想知道的是使用c89,c90,c99或c11中的哪一个.
我的编译器将其扩展为199711L.那是什么意思?我读到__cplusplus> 199711L表示C++ 11.这个宏有什么可能的扩展,它意味着什么?
最近我遇到了我编写的c ++代码中的编译错误,所以我被问到是否使用的是C++ 11编译器,但老实说我不知道如何检查我的编译器版本!所以任何想法如何解决这个问题?
顺便说一句,我正在使用代码块作为IDE,其中包括GG编译器和MinGW的GDB调试器.如果我在Linux下编译我的c ++代码,我应该运行什么命令来了解我的编译器版本?
我已经更新了 gcc 的版本,gcc --version 产生以下输出
gcc (Ubuntu 8.1.0-5ubuntu1~16.04) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)
我可以在头文件中包含文件系统而没有任何错误
#include<filesystem>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试访问如下所示的命名空间文件系统时,我收到错误消息
namespace fs = std::filesystem;
Run Code Online (Sandbox Code Playgroud)
错误信息
error: ‘filesystem’ is not a namespace-name
namespace fs = std::filesystem;
Run Code Online (Sandbox Code Playgroud)
这似乎很奇怪,因为 gcc 8 支持 std::filesystem 并且它在命名空间中不可用,我在访问 std::filesystem 时做错了什么吗?
是的,我用 -std=c++17 构建
经常提到-std标志应该用于指定编译C++程序时希望使用的标准(例如,-std=c++11或-std=gnu++11).一个通常没有解决的相关问题(至少据我所知;例如,参见Dennis根据Oskar N选择的答案高度评价的评论)是如何确定默认的C++标准是什么正在被编译器使用.
我相信可以通过查看手册页(至少对于g ++)来判断,但我想问这是否正确以及是否有更明确/具体的方法:
在描述中-std,手册页列出了所有C++标准,包括GNU方言.在一个特定的标准下,它是相当不明确的,This is the default for C++ code.(C标准有一个类似的陈述:) This is the default for C code..
例如,对于g++/gcc version 5.4.0,这列在下面gnu++98/gnu++03,而对于g++/gcc version 6.4.0,它列在下面gnu++14.
这自然似乎表明了默认标准,但它写得如此不显眼,以至于我并不完全确定.如果是这种情况,也许这对那些对这个同样的问题感到疑惑的人有用.其他C++编译器还有其他方便的方法吗?
编辑:我遇到了这个相关的问题,但那里的答案相当复杂,并没有产生具体的,明确的陈述.也许我应该在得到证实之后将其作为对这个问题的答案.
我想知道当我执行类似g++ main.cpp.
我知道我可以运行g++ -v编译器版本,例如返回:
Apple clang version 14.0.0 (clang-1400.0.29.202)
Target: arm64-apple-darwin22.1.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Run Code Online (Sandbox Code Playgroud)
但我不确定这里使用的默认 C++ 语言版本是什么。
我也知道我可以用来-std=c++(version)更改它,但是,最好将默认值设置为 c++20 以保持最新状态并且不必使用标志。
我拥有Windows 10操作系统,使用VS Code编写我的C ++代码,并使用CMD编译我的程序。我真的不知道PC中的编译器(MinGW,gcc版本6.3.0)使用哪种标准,但是我只想忍受它使用最新的标准(例如C ++ 14或17)。不幸的是,我需要输入在-std=c++17我每次需要使用标准的编译我的程序。如何将所需的标准设置为默认值?