GCC的粗糙介绍(Hello,World!)
#linux #c #alx

编写一个通过预处理器运行C文件并将结果保存到另一个文件中的脚本。
C文件名将保存在变量$ CFILE
中 输出应保存在文件c

这是开始我的旅程学习C,设置您的环境和所有方面的第一个任务。似乎很简单...直到我在终端中使用 man gcc 。输出?可以说我读了一半,放弃了。最终得到了一个book on GCC,我认为,这在打破命令和标志Eli5样式方面做得更好。

无论如何,C程序通过4个汇编阶段;

  • 预处理器
  • 编译器
  • 汇编器
  • Linker

预处理

在预处理阶段,宏和标题文件扩展,即您看到添加到文件中的内容。宏?标题文件?您会看到他们的源代码。
顺便说一句,预处理步骤创建一个用.i扩展名的文件。要通过预处理程序传递C文件,您正在寻找的标志是-E,命令;

gcc -E foo.c

汇编

下一步是汇编阶段。在这里,预处理文件通过编译器传递,该文件又通过扩展名为“ .s”创建源文件,其中包含汇编代码。这里的标志是-S,与预处理器相同,但旗帜被换成。请注意,尽管使用标志不会创建对象文件,但这是汇编程序的作业。

汇编器

第三阶段,汇编器。除非那些在我天生之前了解到这个星球上的任何人,除非您是机器人或遵循机器方式奉献生活的人,否则这是勉强理解的。 > 汇编程序将其源为源文件,并将其转换为包含计算机代码的对象文件。要调用汇编器,请使用

as foo.s -o foo.o

这将生成对象文件'foo.o'。

链接器

最后阶段是链接器。这里的引擎盖下发生了很多事情,但是缺点是您调用gcc,然后是对象文件,希望像这样编译;

gcc foo.o

命令生成一个名为A.Out的可执行文件。要运行可执行文件,请指向可执行文件所在的路径,然后在终端上的可执行文件。点击Enter,C文件的结果应在您的终端上显示。

回到问题,按照说明,您将意识到您需要两个命令/标志。一个用于通过预处理器传递文件,另一个用于命名文件的输出
总而言之,答案的;

gcc -E $CFILE -o c

希望其余的任务对您很有意义(除了高级任务外,必须检查男人页面和Wikipedia以弄清楚它)。

P.S:博客文章对我来说有点像日记,我并不想教育任何人。不在我里面。此外,那里还有很多材料(我很乐意分享我使用的材料,它们主要是书籍,偶尔潜水到男人页面,也许是stackoverflow和stackexchange)。