直到今天,我总是在互联网上读到 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
Run Code Online (Sandbox Code Playgroud)
然而,作者在第 11 页指出:
POSIX 标准指定 c99 存在于您的系统上,因此上述行的与编译器无关的版本将是:
c99 erf.c -o erf -lm -g -Wall -O3
Run Code Online (Sandbox Code Playgroud)
这似乎表明这两个命令存在差异。我无法找到任何其他信息,也无法从文本中清楚地看出第二行到底是什么(我的 Cygwin 上也没有 c99 的手册页)。
C99是ISO C标准的1999年版本。它取代了 1990 年标准,并且(至少在官方上)已被 2011 年标准取代。
不过,您要问的是c99命令(我已更新您的问题标题以澄清这一点)。
POSIX 指定一个c99命令。此处记录了这些要求。它是“标准 C 编译系统的接口”。
在典型的 Linux 系统上,该c99命令/usr/bin/c99是一个调用该gcc命令的小型 shell 脚本。它gcc通过-std=c99选项调用。它还检查用户是否已经指定了等效选项,因此不会两次使用相同的选项。如果给出了不兼容的选项,例如c99 -std=c90,它将终止并显示错误消息。
鉴于这样的实现,命令
c99 [args]
Run Code Online (Sandbox Code Playgroud)
完全等于
gcc -std=c99 [args]
Run Code Online (Sandbox Code Playgroud)
正如我上面提到的,C99 标准已正式被 C11 标准取代。gcc 版本 5(当前最新版本是 5.3.1)对 C11 有相当好的支持,但不是 100% 完全支持。POSIX 尚未指定命令c11。
如果您不需要 C11 特定的功能,那么使用 C99 标准也没有什么问题;如果您不需要 C99 特定的功能,则使用 C90 标准也没有问题。
| 归档时间: |
|
| 查看次数: |
1148 次 |
| 最近记录: |