首页 > 代码库 > 我第一个C程序 frist.c

我第一个C程序 frist.c

我第一个C程序 frist.c

1
2
3
4
5
6
7

?

#include?<stdio.h>

int?main(void)
{
????printf("
这是第一个C程序!\n");
????return?0;
}

?

一、程序解释

第一行#include?<stdio.h> 这是一个预处理命令行

include是一个预处理命令,意思是包含一个文件到当前文件

预处理命令行都是以"#"开头

<stdio.h> 指的standard input output 标准的输入输入

".h"指头文件(header files)主要包含函数的声明,宏定义等,这个文件主要包含以下输入输出的函数

<>指在系统路径下查找这个文件,也可以替换为"stdio.h",指先在用户目录查找,然后再在系统目录查找这个文件

第二行 空白行,为分割主要代码和前面的预处理,使代码看着更有组织

第三行 int?main(void) 这是C的主函数是函数的首部,所有C程序都是从这个函数开始执行,而且每个程序有且只能有一个main的定义。int 表示main函数的返回值是int(整型),void说明这个main函数没有参数。一个函数可以没有参数但是后面的"()"小括号不能省略。

第三行和第七行 一对花括号 "{}"这个表示函数体,其中的内容为函数实现代码部分

第四行 printf("这是第一个C程序!\n"); 这句意思是调用printf函数在标准输出设备(屏幕)上输出"这是第一个C程序!\n"这句话,最后的\n意思是回车,输出会换行。

第六行 return?0;主函数返回一个0.主函数一般有操作系统调用执行,返回给操作系统一个0表示程序成功执行完成。

二、预处理

????编译前预处理程序根据预处理命令对C源代码做一个初步处理,主要有宏替换、条件编译和文件包含。
windows平台下可以使用VC的编译器程序cl(直接使用cl命令需要在环境变量中添加cl路径),在命令行下输入 cl /P first.c 会成一个first.i文件,这个就是预处理后的文件。打开这文件在最后会发现我们的代码,这int main(void)之前多出很多代码。主要就是把stdio.h这文件包含了进来。

linux下使用 gcc -E first.c -o first.i 命令可以查看预测到first.i中的结果。也是多了很多代码,但是明显和windows下的不一样,这说明不同的预处理程序处理的结果是不同的,除了包含stdio.h这个文件外还会添加自己的一些东西。

三、编译

将源代码转为汇编语言,优化也在这一阶段处理。优化选项可查看程序帮助。

Windows cl /FA first.c 会生成 first.asmfirst.objfirst.exe,其中first.asm是编译后生成的汇编代码。Cl命令在这一步一次完成了编译、汇编和连接,貌似没有单独编译为汇编的命令。

Linux gcc -S first.i 会生成 first.s这个汇编文件。查看first.asm first.s他们是不同的。不同的编译程序和不同的平台生成的汇编代码是不相同的。

四、汇编

????将汇编代码转换为机器的二进制语言。在上一步中直接进行了汇编和连接过程。

Linuxgcc -c first.s 则可以生成二进制first.o文件。

五、链接

将生成的目标文件,通过link程序链接生成平台可执行文件。Linux上的可执行文件在windows上是不能执行的,反之亦然。可执行文件是由他的文件结构和权限决定其是否能够执行。而不是因为他的扩展名是exe。连接过程需要很多文件库文件,不同平台也不同。Linux使用ld程序,windows使用link程序。具体使用请查看ldlink程序说明。

六、执行

????执行生成的可执行,在屏幕上输出"这是第一个C程序!"

?

七、其他说明

gcc cl生成可执行文件,这个过程并不是单一的gcccl完成,而是由多个程序完成的。每个阶段都有相应的处理程序。

gcccl编译器有很多选项,可以查看其手册。

我第一个C程序 frist.c