C语言编译过程

预处理  该部分主要包括:宏   条件编译  文件包含   和一些其他指令四部分

  1. 1.宏:宏的替换:1、在调用宏时首先对其参数检查,如果参数又包含#define定义的符号,则它们首先被替换  2、替换文本会被插入到程序中原本文本的地方,宏名会被参数所替换  3、最后再扫描文本,如果还有#define定义的符号,则重复上面操作。
  2. 宏与函数的区别1、每次使用时,宏代码都被插入到程序中,除了非常小的宏外,程序的代码都会大幅提升。而函数代码只出现同一个地方。  2、宏的执行速度更快,而函数在调用和返回时有额外的开销。  3、宏的求值可能会产生副作用。函数只在调用时求值一次,将值传递给函数。  4、宏与类型无关,只要对参数的操作是合法的,它可以使用任何类型参数。函数参数与类型有关,形参和实参类型必须一致。  5、宏替换实在编译期间进行的,所以不能调试。函数调用实在执行期间,可以调试。
  3. 2.条件编译

作用:条件编译的功能使我们可以按照不同的条件去编译不同的程序部分,因而产生不同的目标代码文件

第一种条件编译方式:#ifdef  标识符  程序段1  else  程序段2  #endif  它的功能是如果标识符已经被#define命令定义过则程序段1参与编译否则程序段2参与编译,这种方式与if else语句用法相同

第二种条件编译方式:#ifndef  标识符  程序段1  else  程序段2  #endif  如果标识符未被#define定义,则程序段1参与编译,否则程序段2参与编译

第三种条件编译方式:#if  常量表达式  程序段1  #else  程序段2  #endif  如果常量表达式的值为真则程序段1参与编译,否则程序段2从那与编译

  1. 3.文件包含:在预编译处理阶段,于处理器发现#include指令之后,会将文件的内容

包含到当前文件进行编译。1、#include<filename>采用<>,预处理到系统规定的路径中去获得这个文件,找到文件内容后用文件内容替换该语句。  2、#include“filename”,“”标识预处理先在当前目录中查过这个文件,若找不到再按系统指定的路径信息搜索路径信息搜索其他目录,找到文件后用文件内容替换该语句。

4.其他指令:1、#error 生成编译错误提示信息,并停止编译。  2、#ine改变当前行数

或文件名称  3、#pragma  这个指令比较复杂,它的作用是设定编译器的状态或者指示编译器完成一些特定动作(#pragma message,#pragma code_seg,#pragma once,#pragma pack……)。  4、“#”把语言符号转化为字符串  5、“##”把两个语言符号组合成单个语言符号

编译:1、语法分析 2、词法分析 3、语义分析 4、符号汇总 5、文本语言转换成汇编语言

汇编:1.生成目标文件(Windows下生成.obj   Linux下生成.o)2、形成符号表3,汇编指令转换成二进制命令

链接:1、合并段表  2、符号表的合并与符号表重定位  3、Windows下生成可执行程序.exe文件。  Linux下生成 ./a.out文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值