提问人:Nicolas F 提问时间:3/21/2022 最后编辑:Nate EldredgeNicolas F 更新时间:3/21/2022 访问量:654
gcc -E 选项代表什么?
What does gcc -E option stand for?
答:
总结
此选项在编译器上引入的时间比 GCC 早得多,并且 GCC 使用相同的命名来实现兼容性。
我从历史证据中得出的最佳猜测是,它代表“扩展宏”。
-E
那些早期编译器的作者无法调用它,因为已经有一个选项,它也只运行预处理器,但将输出写入文件而不是标准输出。 也被带走了。
-P
-P
.i
-p
随着时间的流逝,它变得更受欢迎,并且在编写 GCC 时,它只支持而不是 .
-E
-P
-E
-P
尽管据说是 Stack Overflow 的主题,但我认为一些历史将有助于解释这个选项是如何得名的。
gcc(1)
从更早的 Unix C 编译器继承了它的基本命令行选项。许多版本可以在 Unix Tree 存档中找到。
看起来支持的第一个版本是 Research Unix V7,大约 1979 年:cc(1)
源代码,手册页源代码。还有一个选项也只是运行预处理器,但将结果发送到文件而不是标准输出。V6 已经支持但不支持:cc(1)
源、手册页源。-E
-P
foo.i
-P
-E
这至少回答了为什么没有命名:因为已经在使用中。(也被拿走了,它被用来请求分析。我发现为什么选择的唯一提示是源代码中相应的标志变量被命名为 。我冒昧地猜测这代表“扩展”,因为基本上就是扩展宏。-E
-P
-P
-p
-E
exflag
-E
似乎最终被弃用了,取而代之的是 .V8 仍然支持它,但从手册页中省略了它。V10(大约1989年)包括两个版本的编译器,一个是编译传统的C,另一个是ANSI C。手册页说支持预处理器行为,但对于 lcc,做了其他事情(“在标准错误时为所有定义的全局变量写入声明”)。他们都支持.在其他方面,32V 和 BSD,至少在最初,支持两者,但会发出警告,说它已经过时了,应该改用。-P
-E
cc
lcc
cc
-P
-P
-E
-P
-E
看起来,从最早的版本开始,只支持而不是不支持。从那时起,引入了一个选项,但它执行了其他操作(“禁止生成线标记”)。gcc
-E
-P
-P
评论
.c