我也要学C语言第二章:第一个C程序的编译初解

  上一次我学习了在VC6.0下成功的运行了第一个C程序,实在是感觉到兴奋.但是关于编译,链接等步骤,VC6.0已经傻瓜化的帮我做了,我感觉到确实很方便,但是这样才给我带来了1个问题,就是其中的步骤只是看了书有所了解,自己呢,没有实践过,所以感觉还不是自己的东西。所以我决定自己用记事本写个程序,但是自己动手实现编译,链接等VC帮我做了的事情。

  首先,我用记事本写上那个helloworld程序。

#include<stdio.h>

int main(void)
{
printf(
"Hello,World!\r\n");

return (0);
}

然后把此文件后缀命名为.c的hello.c文件。

  然后在CMD中,用CL hello.c 这时,CL编译器就会生成2个文件。1个是hello.exe文件,1个是hello.obj文件。.exe文件我知道是WINDOWS平台的可执行文件,可是这个.obj是个什么文件啊,我不懂,我查阅下了资料。原来.obj文件是通用的COFF的格式,是个目标文件,可以和其他平台交互.但是怎么一下子出现了2个文件啊!原来直接用CL命令,编译器给自动链接了。这里要加1个参数/c。这样编译器就不会自动链接了。嗯!加了参数/c后果然只有1个.obj文件了!!!现在没有了.exe要怎么才能生成.exe文件呢,这里就要用到另外1个命令工具了,link.这个工具就是链接器!然后我这样做:link hello.obj。这样做了link就为win平台造了个pe格式的hello.exe.嘿嘿!这下子就可以在WIN平台运行hello程序了!!!

  上一节中有个网友提醒我,#include<stdio.h>是将stdio.h这个文件在此处原样展开。于是我深入学习了下证明了他的说法,是这样的,非常感谢他!但是如何才能自己看到这一过程呢。就是在cl命令后面加上2个参数/c和/p。我试试!这样呢,就会多了1个.i文件。然后我打开它,尽然有400多行,我仔细对照了stdio.h中的内容,是一样的,但是其中有个细节,就是stdio.h文件中也包含了其他文件,所以全部展开后就400多行了!

  嗯!现在差不多明白了第一个程序是如何做的了!

原文地址:https://www.cnblogs.com/dodolook/p/2053044.html