如何在Mac终端中使用C++ 11支持编译C++

4ae*_*1e1 66 c++ macos terminal g++ c++11

我想在Mac终端中编译C++ 11源代码但是失败了.我试过g++ -std=c++11,g++ -std=c++0x,g++ -std=gnu++11g++ -std=gnu++0x,但毫无效果.终端总是读unrecognized command line option.但是,这样的g++ -std=gnu事情工作正常(当然C++ 11源代码无法通过).

我应该使用哪个选项来启用C++ 11支持?

顺便说一句,我正在使用的命令行工具安装在Xcode中,我很确定它们是最新的.

bam*_*s53 97

正如其他人指出你应该使用clang++而不是g++.此外,您应该使用libc ++库而不是默认的libstdc ++; 包含的libstdc ++版本非常陈旧,因此不包含C++ 11库功能.

clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp
Run Code Online (Sandbox Code Playgroud)

如果您尚未安装Xcode的命令行工具,则可以运行编译器和其他工具,而无需使用该xcrun工具.

xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp
Run Code Online (Sandbox Code Playgroud)

此外,如果您要禁用某个特定警告,则可以将其他标志传递给编译器以执行此操作.在警告消息的末尾,它会显示启用警告的最具体标志.要禁用该警告,请在前面no-添加警告名称.

例如,您可能不希望c ++ 98兼容性警告.在这些警告结束时,它会显示标志-Wc++98-compat并禁用它们-Wno-c++98-compat.

  • 刚刚测试了你说的话.实际上,一个简单的`std :: array`会将默认的`libstdc ++`敲出来. (3认同)

Cor*_*lks 25

XCode使用clangclang++编译时,不是g++(假设你没有自定义的东西).相反,尝试:

$ cat t.cpp
#include <iostream>

int main()
{
    int* p = nullptr;
    std::cout << p << std::endl;
}
$ clang++ -std=c++11 -stdlib=libc++ t.cpp
$ ./a.out 
0x0
Run Code Online (Sandbox Code Playgroud)

感谢bames53的回答,指出我已经遗漏了-stdlib=libc++.

如果你想使用一些GNU扩展(也使用C++ 11),你可以使用-std=gnu++11而不是-std=c++11,这将启用C++ 11模式并启用GNU扩展.

  • 不确定-1是什么...如果是因为我遗漏了`-stdlib = c ++`那么发表评论会很好,所以我可以更快地修复它! (10认同)