直到今天,我总是在 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/