我知道在大多数GNU/Linux系统上,可以从命令行以"cc“的名称调用GCC (而不是"gcc")。当它以一种方式和另一种方式调用时,GCC的行为有什么不同吗?
例如,我知道通过名称"g++“而不是" GCC”调用GCC会导致GCC的行为不同(它将.c文件视为C++源代码和链接-在C++标准库中)。"gcc“和”抄送“在行为上有相似的区别吗?
编辑:到目前为止,没有一个收到的答案给出了明确的“是”或“否”,即如果以一种方式调用而不是另一种方式调用,GCC的行为是否会有所不同。然而,深入研究源代码以检查其行为的想法将我引向了这条道路。根据我在那里的发现,我现在相信答案是:
号无论是通过" GCC“还是"cc"调用,gcc的行为都是一样的。
发布于 2009-06-02 15:41:56
至于grins,我刚刚追踪了argv[0]是如何在gcc (main.c -> top_lev.c -> opts.c -> langhooks.c)内部使用的,看起来argv[0]目前只是用来在malloc发生故障时给它一些报告。如果argv[0]不是gcc,则看起来不会有任何行为变化。
发布于 2009-06-02 15:07:24
在我看来,cc (链接到一些旧的SUS规范)旨在成为系统编译器的供应商中立接口。它被标记为遗留:
c89实用程序提供了一个到ISO C标准的接口,但是cc实用程序接受C语言的一种未指定的方言:它可以是标准C、通用C或其他变体。可移植的C程序应该符合ISO标准,并用c89编译。
POSIX有一个名为c99的实用程序,我认为它是c89的继任者。上面写着
c99实用程序基于最初在ISO 2:1993标准中引入的c89实用程序。c89的一些更改包括对标准库部分内容的修改,以说明新的标头和选项;例如,添加到-l rt操作数中,以及为跟踪函数添加的-l跟踪操作数中。
我并不真正熟悉所有这些不同的标准,但看起来最近的SUSv3 (POSIX:2004)和更新的POSIX:2008 (似乎还没有SUS编号)不再指定名为cc的实用程序,而只指定名为c99的实用程序。顺便说一下,我的Linux系统(Arch_Linux)包含一个c99的手册页,但没有包含c89,而且只包含一个名为cc的实用程序,但既不包含c89,也不包含c99。这里有很多混淆:)
发布于 2009-06-02 14:55:12
在我的苹果电脑上使用man gcc
在苹果版的GCC中,cc和gcc实际上都是指向一个编译器的符号链接,这个编译器的名字就像gcc-version。类似地,c++和g++是指向类似g++-version的编译器的链接。
基于此,我假设cc和gcc的行为方式是一样的。
https://stackoverflow.com/questions/939989
复制相似问题