当前位置: 首页 > 知识库问答 >
问题:

如何在Mac终端中编译支持C 11的C

夏何平
2023-03-14

我想在Mac终端中编译C11源代码,但失败了。我尝试了g-std=c11g-std=1c0xg-std=gnu11 ,但都没有成功。终端始终读取 无法识别的命令行选项。然而, g-std=gnu和类似的东西运行良好(当然,C11源代码无法通过)。

我应该使用哪个选项来打开C 11支持?

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

共有2个答案

左丘嘉言
2023-03-14

XCode在编译的时候用的是< code>clang和< code>clang ,而不是< code>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

感谢巴姆斯53的回答指出我遗漏了-stdlib=libc

如果您想使用一些GNU扩展(同时也使用C11),可以使用-std=gnu11而不是-std=c11,这将打开C11模式并保持GNU扩展启用。

昝涛
2023-03-14

正如其他人指出的那样,您应该使用 clang 而不是 g 。另外,你应该使用 libc 库而不是默认的 libstdc ;libstdc 的包含版本相当旧,因此不包括 C 11 库功能。

clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp

如果尚未安装Xcode的命令行工具,则可以使用xcrun工具运行编译器和其他工具,而无需执行此操作。

xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp

此外,如果要禁用某个特定的警告,可以向编译器传递其他标志。在警告消息的末尾,它将向您显示启用警告的最具体标志。要禁用该警告,请在警告名称前加上no-

例如,您可能不希望出现c98兼容性警告。在这些警告的末尾,它显示标志-Wc 98 compat,要禁用这些警告,请传递-Wno-c 98 compat

 类似资料:
  • 我试图学习如何在终端中编译在IDE Eclipse上制作的Java程序。在打开终端后立即开始,我应该采取什么步骤在终端中编译我在Eclipse上制作的程序?谢谢你的帮助。 更新:我导航到了我的java文件夹,找到了存放我的程序的包,并完成了javac Hello一行。java(Hello是我试图编译的基本“Hello World”程序),但当我执行java Hello时,会出现一个很大的错误: 线

  • 问题内容: 我想将我的.java(几个)编译成至少与Java 兼容的,较新的(最好是较新的)版本。(我有) 问题答案: 是的,您可以在编译时设置编译器的版本。并将您的Java代码编译为Java的旧版本。 从Oracle文章:http : //docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javac.html 交叉编译示例 在这里,我们使用ja

  • 我已经下载了Xcode 8.0测试版,其中包括更新的Swift 3编译器。是否可以在终端上使用Swift 3编译器? 例如,我可以使用“Swift(filename)”命令在终端中编译和运行Swift 2.2代码。

  • 问题内容: 我正在尝试使用Python 2.5.1支持来编译Vim 7.2,但是遇到了一些麻烦。 我运行configure,看起来好像按预期工作 我可以看到对更改所做的工作符合我的预期(最终的编译版本具有新功能),并且可以正确设置Python 正在检查python …(已缓存)//python/2.5/bin/python正在检查Python版本…(已缓存)2.5正在检查Python是否为1.4或

  • 我想将我的.java(几个)编译成一个,该至少兼容和更新版本,最好是和更新版本的Java。(我有)

  • 我想在我的linux终端上编译一个Netbeans Maven-Java应用程序。 这是因为我想使用Git CVS并能够在独立于IDE的服务器中编译项目。 但我很难真正理解依赖关系是如何工作的,或者我就是这么想的。 我正在使用一个简单的java应用程序代码连接到mysql数据库并获取一些信息。 我正在使用此代码: 然后将mysql连接器java添加到项目依赖项pom中。xml如下所示: 如果我将n