❶ C语言中 “编译时处理” 与 “预处理” 两个概念的区别
浩强哥的教材中说的很清楚,可以参考。简单来说,C语言程序在编译前,其实是有一个预备工作的,这个就是“预处理”,可以理解为:人类所编写的程序,需要转化为机器能够编译的合理输入文件。机器编译,就是按照语法来处理语句,一些语句或者逻辑是在编译时才有意义,才进行分析,这就是“编译时处理”。
❷ c语言编译预处理
编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。
如果用一张图来表示:
读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理
[析] 伪指令主要包括以下四个方面
(1)宏定义指令,如#define Name TokenString,#undef等。对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的'出现不再被替换。
(2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif,等等。这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉
(3)头文件包含指令,如#include "FileName"或者#include 等。在头文件中一般用伪指令#define定义了大量的宏(最常见的是字符常量),同时包含有各种外部符号的声明。采用头文件的目的主要是为了使某些定义可以供多个不同的C源程序使用。因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再在此文件中将这些定义重复一遍。预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。
包含到c源程序中的头文件可以是系统提供的,这些头文件一般被放在/usr/include目录下。在程序中#include它们要使用尖括号(<>)。另外开发人员也可以定义自己的头文件,这些文件一般与c源程序放在同一目录下,此时在#include中要用双引号("")。
(4)特殊符号,预编译程序可以识别一些特殊的符号。例如在源程序中出现的LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名称。预编译程序对于在源程序中出现的这些串将用合适的值进行替换。
注意:
预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。
❸ 编译预处理命令是C语言文本的一部分吗
(1)首先编译预处理命令不是C语言文本的内容,是某个编译工具的功能,不同的编译工具,功能及命令是可能不同的。
(2)C语言程序的入口函数与开发工具及提供的运行库有关,通常在链接时可以指定,如采用MS VC时,可以在link 时使用 /ENTRY:function 指定,function就是入口函数,但function必须是运行启动库中支持的入口函数,如:mainCRTStartup 就是调用会调用主函数 main() 的入口函数,wmainCRTStartup 则是宽字符版本,会调用主函数wmain(),WinMainCRTStartup 则会调用主函数WinMain()。因此,入口函数是运行库提供的,当然你也能定制自己的运行库,自己编写入口函数,入口函数主要是完成内存及运行库的初始化工作, 在C语言中 main函数是主函数,就是入口函数完成初始化工作后调用的函数。MS VC中,C可以编写控制台,窗口应用、DLL动态库等不同的应用类型代码,并有多种字符集代码页的运行库, 因此有不同的初始化环境,也就有不同的入口函数及主程序。
❹ 在vc中,什么是编译,预处理,链接
预处理即对源码进行编译前处理
语句前为"#"的语句就是在预处理期间作用的
如#include会在此位置帖上文件的内容,#define则会替换字串的内容
编译是将源文件处理成目标文件的过程,目标文件并不是可执行的代码,它包含有许多位置代码,如某些函数在可执行文件的实际位置
如编译出来的目标文件有类似的位息:
main: 233
fun1: 300
fun2: 545
fun3: 700
链接则是将许多目标文件合并处理成可执行文件
如上例中
main和fun1在1.obj中
fun2和fun3在2.obj中
这样在第一个文件中main函数里可以调用fun2,并可以通过编译,而不用定义
在链接时,链接器统计所有obj里的这种位置信息
然后将1.obj中引用fun2中的内容替换成545
这样,两个obj中的函数等信息可以互相调用
❺ C语言源程序的编译过程包括哪三个阶段
编译:将源程序转换为扩展名为.obj的二进制代码
连接:将obj文件进行连接,加入库函数等生成可执行文件
运行:执行可执行文件,有错返回修改,无错结束
❻ 编译程序预处理干什么
编译预处理是C语言区别于其它高级程序设计语言的特征之一,它属于C语言编译系统的一部分。C程序中使用的编译预处理命令均以#开头,它在C编译系统对源程序进行编译之前,先对程序中这些命令进行“预处理”。编译预处理命令的三种不同形式:宏定义、文件包含和条件编译。
❼ c语言程序编译过程包括哪四个
C语言编译过程分成四个步骤:
1,由.c文件到.i文件,这个过程叫预处理
2,由.i文件到.s文件,这个过程叫编译
3,由.s文件到.o文件,这个过程叫汇编
4,由.o文件到可执行文件,这个过程叫链接
用gcc查看预处理过程(假设源文件叫hello.c)
gcc -o hello.i hello.c -E
然后用 vi hello.i 即可查看生成的预处理文件
按ESC 输入:$ 跳到预处理文件 可看到hello.c源码
宏的本质:预处理阶段的单纯的字符串替换
预处理阶段,不考虑C语法
❽ C语言 四个过程:预处理,编译,汇编,链接,分别进行了什么过程别度娘。
1.预处理
这个阶段用来处理所有的预处理指令
-
主要是一些宏替换,头文件导入
2.编译
对预处理后的代码进行翻译工作,得到计算机
所认识的格式编译工作得到的结果文件叫做目标文件,
扩展名是.o(编译得到汇编文件(.s)
->经过汇编后得到.o目标文件)
3.链接
把所有的目标文件和其他必要的文件合并在一起
得到最终的可执行文件