C语言程序是怎么在计算机中运行起来的

  • hello.c
#include <stdio.h>

int main(){
	printf("hello,world\n");
	return 0;
}

这段 C语言程序的代码能被编程人员读懂,但是计算机系统读不懂。C语言、C++、java 这些高级编程语言本质上还是人类用的语言而不是计算机用的语言。
为了能在计算机上运行这个 C语言程序,需要由其他程序将每一条 C语言程序转化成低级的机器语言指令。这些指令会被按照一种被称为可执行目标程序的格式打包好,以二进制存储文件的形式存储起来。目标程序也称为可执行目标文件。
C语言编译器驱动程序将 C语言程序文件 hello.c翻译成一个可执行目标文件 hello。整个翻译过程可分为四个阶段,执行四个阶段的程序为:

  • 预处理器
  • 编译器
  • 汇编器
  • 链接器

image.png

以下是以这个“hello.c”程序为例,对四个阶段的讲解:

  1. 预处理器阶段:
    • 在这个阶段,预处理器会处理“#include <stdio.h>”这行代码。它会把“stdio.h”这个头文件的内容插入到当前位置。头文件中通常包含了一些函数的声明,比如“printf”函数的声明。此外,预处理器还可能处理其他的预处理指令,比如宏定义等。对于我们的“hello.c”程序,经过预处理器处理后,就为后续的编译做好了准备。
  2. 编译器阶段:
    • 编译器会把预处理后的代码翻译成汇编语言代码。在这个例子中,它会分析“int main()”函数中的语句,比如“printf(“hello,world\n”);”和“return 0;”,并将其转换为相应的汇编指令。这些汇编指令是一种更接近机器语言但仍然相对可读的形式。
  3. 汇编器阶段:
    • 汇编器的任务是将编译器生成的汇编语言代码转换为机器语言指令。机器语言指令是由二进制数字组成的,计算机可以直接执行。对于“printf”这样的函数调用,会生成相应的机器指令来完成函数的调用和参数传递等操作。
  4. 链接器阶段:
    • 因为我们的程序可能会调用一些库函数,比如“printf”函数就是在标准库中定义的。链接器会把我们程序生成的目标文件和系统提供的库文件(包含了“printf”等函数的实现)链接在一起,形成一个完整的可执行目标文件。这样,当我们运行这个可执行文件时,计算机就能正确地执行“printf”等函数,输出“hello,world”并最终结束程序返回 0。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

01红C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值