HELLOWORLD程序

HelloWorld程序

给出C语言下的Hello,World程序hello.c。这个程序也会作为计算机系统中的分析案例。

通过GCC编译器的命令“gcc ./hello.c”就可将代码编译为当前操作系统下的可执行文件“a.out”。然后通过命令“./a.out”就可执行它,其结果是在终端打印“hello,world!”。代码中的main函数是一种ANSI C标准给出的约定,其约定C程序执行入口是名叫main的函数,并且其返回值类型是int。main可以接受参数也可以不接受参数,接受参数的一种用法是接受执行时Shell传入的参数。

 

HelloWorld程序 — GCC编译流程

5bb7cccd-e836-4bcc-b309-1878677cf4df

hello.c虽然只经过1条命令就完成了编译,但事实上GCC内部是分为几个阶段编译hello.c,并且GCC允许通过额外的参数来指定编译阶段,比如说可指定把hello.c仅编译成第2个阶段的汇编代码。下面来具体看一下Linux系统下GCC编译hello.c的各个阶段:

1) 预处理阶段:该阶段只处理预处理指令include,将stdio.h拷贝到include位置;

2) 编译阶段: 将预处理后的C代码编译为汇编代码,具体代码与当前硬件有关;

3) 汇编阶段:将汇编代码变成机器码,并打包成“可重定位目标程序”的二进制文件(hello.o);

4) 链接阶段:hello.c中使用到了C语言标准库stdio.h中的printf,绝大多数编译器都必须支持标准库。printf的实体是编译好的printf.o,printf的功能实现需要操作系统的支持,所以printf.o在不同操作系统下是不同的。链接阶段会将hello.o和printf.o链接得到可在当前操作系统运行的可执行文件;

这里来看指令“gcc hello.c -S”,其执行后会把hello.c编译为第2阶段的汇编代码,保存为hello.s。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部