一。概述
1.编译预处理是C语言编译系统的一个组成部分。编译预处理是在编译前由编译系统中预处理程序对源程序的预处理命令进行加工。
2.源程序中的预处理命令均以“#”开头,结束不加分号,以区别源程序中的语句,他们可以写在程序中的任何位置,作用域是自出现点到源程序的末尾。
二。三种预处理命令
执行宏定义(宏替换);包含文件;条件编译(主要用于调试)
三。宏定义
1.简单宏定义
定义形式:#define 宏名 串(宏体)
2.作用:宏定义后,该程序中宏名就代表了该字符串
3.说明:#undef宏定义的作用域
4.宏定义的嵌套使用:
#define r 3.0
#define pi 3.4
#define L 2*pi*r
void main()
{
printf("L=%f\n",L);
}
双引号内的与宏同名的字母不作宏展开。
5.带参数的宏定义
(1)带参数的宏定义的一般形式
#define 宏名(参数名) 字符串
#define s(a,b) a*b
(2)带实参的宏名展开时,宏名被宏体替换,宏体中的形参按从左到右的顺序被实参替换。
四、宏定义与函数的区别
1、引用宏只占编译时间,不占运行时间
2、引用宏没有返回值
3、宏名与形参无类型只是一个符号代表
4、实参为表达式
函数调用是先计算出实参的值,再将值传递给形参;宏的引用是用表达式替换形参。
例:定义 #define s(a,b) a*b
引用:s(a+c,b+c)
展开:a+c*b+c
五、文件包含
#include
1、一个源文件可以将另一个源文件的全部内容包含进来
2、两种形式
#include<文件名>:包含标准头文件(/usr/include下的)
#include"":包含自定义的头文件(在当前目录)
六、控制条件为常量表达式的条件编译
1、形式一
#if 常量表达式
程序段
#endif
功能:常量表达式非零时,程序段被编译;否则程序段不被编译。
2、形式二
#if 常量表达式
程序段1
#else 程序段2
#endif
功能:常量表达式非零时,程序段被编译;否则程序段2被编译。
3、形式三(嵌套形式)
#if 常量表达式1
程序段1
#elif 常量表达式2
程序段2
.............
#elif 常量表达式n
程序段n
#else 程序段n+1
#endif
七、控制条件为定义标识符的条件编译
形式1
#ifdef 标识符
程序段
#endif
当标识符在该条件编译结构前已定义过时,就编译程序段,否则不予编译。
形式二
#ifdef 标识符
程序段1
#else 程序段2
#endif
形式三
#ifndef 标识符
程序段1
#else
程序段2
#endif
阅读(918) | 评论(0) | 转发(0) |