c 各个阶段解释

由多个源文件组成的C程序,经过编辑、预处理、编译,链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义?
A、预处理
B、编译
C、链接
D、执行

A:  预处理  C  语言程序从源代码变成可执行程序的第一步,主要是  C  语言编译器对各种预处理命令进行处理包括头文件的包含、宏定义的扩展、条件编译的选择等
B:  编译之前,C  语言编译器会进行词法分析、语法分析  (-fsyntax-only) 、语义分析 ,接着会把源代码翻译成中间语言,即汇编语言    编译程序工作时,先分析,后综合,从而得到目标程序。所谓分析,是指词法分析和语法分析;所谓综合是指代码优化,存储分配和代码生成。  值得一提的是,大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生可执行的机器语言目标文件。 
C:  链接是处理可重定位文件,把它们的各种符号引用和符号定义转换为可执行文件中的合适信息(  一般是虚拟内存地址  )  的过程。假如一个程序包含多个文件,在分别对每个源程序进行编译并得到多个目标程序后,要把这些目标程序连接起来,同时还要同系统提供的资源(如函数库)连接成为一个整体,如果不出现错误,会得到一个后缀为 .exe的可执行文件

到了链接阶段才会知道各个函数的调用关系,才能出现调用某个函数,但是该函数没有声明找不到的情况。

addition:
1、涉及要内存分配的地方,一般是在程序执行的时候才分配相应的空间,否则分配内存有什么用呢。mallocd 在堆上动态分配内存,在运行时期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值