【发布时间】:2023-03-04 04:36:01
【问题描述】:
我的 Mac 上有 clang 13.0.0。我正在尝试使用命令编译一些.cpp 文件
g++ file.cpp -o file
但我收到此警告消息:
file.cpp:23:26: warning: range-based for loop is a C++11 extension [-Wc++11-extensions]
for (const double &e : timestamp) outFile << std::setprecision(10) << e << "\n";
clang 文档中说 c++11 受 clang 13 支持。在我运行 man clang 的终端上,我发现:The default C++ language standard is gnu++14。
输入g++ -v 我明白了:
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 13.0.0 (clang-1300.0.29.3)
Target: arm64-apple-darwin21.1.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
为什么我会收到此警告?
【问题讨论】:
-
使用
clang file.cpp -o file不会改变结果 -
@MatteoBrini 和
g++ --std=c++14 file.cpp -o file? -
@Jabberwocky 工作,但为什么我必须添加第一个标志?
-
@MatteoBrini 好问题,你几乎应该问一个新问题,例如 “为什么我的 MacOS 上的 clang 13.0.0 上默认的 c++ 标准 C++11 而不是 C++14当文档说它是 C++14 时?” 或者只是更改问题标题
-
@Jabberwocky 事实是这样的:由于
man clang给出的输出,我的clang 版本可以编译c++14 脚本。我正在编译的代码说它至少需要 c++11。添加标志--std=c++14解决了它,但如果我的.cpp文件的默认语言已经是gnu++14