c - 带有相应标志的 "c99"和 "gcc"命令有什么区别?

标签 c gcc c99

直到今天,我总是在 Internet 上读到 gcc 是最好的 C 编译器(至少对于学生级别的编程而言,紧随其后的是 Clang)。 然而在“21st Century C”中,Ben Klemens 先生建议 c99 比运行 gcc -std=c99 更好(?)(实际行是 [第 11 页]:其他人都切换到 C99默认长 很久以前...)

我找不到关于 c99 编译器的任何信息,所以我的问题是:

这些命令之间有什么区别吗?如果有,哪个更好?

编辑:该段中明确提到了标准 C99,但是从一开始建议的编译方法是命令:

 gcc erf.c -o erf -lm -g -Wall -O3 -std=gnu11

然而,在第 11 页上,作者指出:

POSIX 标准指定 c99 出现在您的系统上,因此 上述行的编译器不可知版本为:

c99 erf.c -o erf -lm -g -Wall -O3

这似乎表明这 2 个命令存在差异。我无法找到任何其他信息,也无法从文本中清楚地知道第二行到底是什么(我的 Cygwin 上也没有 c99 的手册页)。

最佳答案

C99 是 ISO C 标准的 1999 版。它取代了 1990 年的标准,并且已经(至少在官方上)被 2011 年的标准取代。

不过,您要问的是 c99 命令(我已经更新了您的问题标题以澄清这一点)。

POSIX 指定了一个 c99 命令。记录了要求 here .它是“标准 C 编译系统的接口(interface)”。

在典型的 Linux 系统上,c99 命令 /usr/bin/c99 是一个调用 gcc 命令的小 shell 脚本。它使用 -std=c99 选项调用 gcc。它还检查用户是否已经指定了等效选项,因此它不会两次使用相同的选项。如果给出了不兼容的选项,例如 c99 -std=c90,它会以错误消息终止。

给定这样的实现,命令

c99 [args]

完全等同于

gcc -std=c99 [args]

正如我上面提到的,C99 标准已正式被 C11 标准取代。 gcc 版本 5(当前最新版本为 5.3.1)具有相当不错的支持,但对 C11 的支持不是 100%。 POSIX 尚未(尚未)指定 c11 命令。

如果您不需要特定于 C11 的功能,则使用 C99 标准没有任何问题——如果您不需要特定于 C99 的功能,则甚至可以使用 C90 标准。

关于c - 带有相应标志的 "c99"和 "gcc"命令有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34699515/

相关文章:

c++ - 创建最小化重叠窗口 (Win32)

c - gcc 生成 .o 文件而不是可执行文件

c - 将堆分配指针转换为指向 VLA 的指针是否安全?

对 C 中的内联声明的困惑

c - 函数之间整数的更新

c程序,通过字符串递增

c - 添加对指针的操作

gcc - 使用 clang 与 gcc 编译嵌套函数

c++ - SIGABRT 在 Mac OS X 上使用 GCC 抛出和捕获异常

C99:数组或堆分配的缓冲区是否会以 UINTPTR_MAX 结束?