赞
踩
一、预处理
1.预处理的定义
预处理是指在进行编译(词法扫描和语法分析)之前所作的工作。预处理是C语言区别于其他高级语言的特征之一, 它由预处理程序负责完成。当对一个源文件进行编译时, 系统自动引用预处理程序对源程序中的预处理部分作处理, 处理完毕自动进入对源程序的编译。
2.预处理的分类
1) 文件包含
2)宏定义
3)条件编译
3.预处理的作用
合理地使用预处理功能编写的程序便于阅读、修改、 移植和调试,也有利于模块化程序设计。
4.C语言的编译分为几个部分:
第一阶段:预处理: .c —> .i C语言文件
第二阶段:编译 .i -> .s 汇编语言
第三阶段:汇编 .s -> .o 可执行文件-机器语言
第四阶段:连接 .o -> 可执行程序
二、文件包含
1.文件包含的定义
文件包含就是在预处理阶段,将#include 包含的文件,替换成原有的文件的内容。可以实现文件分离,声明和实现相分离,是程序更加的模块化。
2.文件包含格式
1)#include //<>: 包含系统文件
2)#include “文件路径/filename” //“”: 包含自定义的文件
三、宏定义
1.什么是宏定义
宏定义就是用一个宏名代替一个字符串,以简化编程,提高程序的可读性。
2.基本的宏定义语法
#define 宏名 被替代字符串
示例:定义常量PI的宏 #define PI 3.141592
说明:
1)# 表示是预处理指令,C语言里面凡是以#开头的,都是预处理指令
2)宏名,一般使用大写,跟普通的变量区别;
3)被替换的字符串,可以是常量、字符串、表达式
4) 宏定义后面不要 + ;
3.宏定义的本质
1)宏展开只是简单的字符串替换,不做正确性检测;
2)宏定义必须在函数外,宏的有效范围是从定义开始到文件的结尾,若想提前取消宏,则可以使用:(#undef 宏名 )取消宏
4.宏定义的作用
1) 程序会更易读
2)程序更易修改
3)可以帮助避免前后不一致或键盘输入错误
4)对数据类型重新命名
5)控制条件编译
5.带有参数的宏定义
#define 宏名(参数列表) 替换字符串
示例:计算两数最大值的宏
#define MAX(a, b) (a > b)? a : b
四、条件预编译
1.条件编译的定义
在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译。
2.条件编译的作用
利用条件编译指令,可以产生不同的版本,对于程序调试,移植都是非常有用的。
3.条件编译的基本使用
#if 条件1
...code1...
#elif 条件2
...code2...
#else
...code3...
#endif
1> 如果条件1成立,那么编译器就会把#if 与 #elif之间的code1代码编译进去(注意:是编译进去,不是执行,很平时用的if-else是不一样的)
2> 如果条件1不成立、条件2成立,那么编译器就会把#elif 与 #else之间的code2代码编译进去
3> 如果条件1、2都不成立,那么编译器就会把#else 与 #endif之间的code3编译进去
4> 注意,条件编译结束后,要在最后面加一个#endif,不然后果很严重(自己思考一下后果)
5> #if 和 #elif后面的条件一般是判断宏定义而不是判断变量,因为条件编译是在编译之前做的判断,宏定义也是编译之前定义的,而变量是在运行时才产生的、才有使用的意义
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。