文档介绍:第9章编译预处理
任课教师张盈
课件制作张盈
主要内容
宏替换
文件包含
条件编译
预定义宏
运算符#和##
后三节为
自学内容
预处理命令
所谓预处理,就是C编译程序对C源程序编译前由编译预处理程序对预处理命令进行处理的过程。
C语言中,以“#”开头(如#define)的语句统称为编译预处理命令。
这些命令必须在一行的开头以“#”开始,末尾不加分号,以区别一般的C语句。
C语言的预处理命令
宏定义:
#define , #undef
文件包含:
#include
宏替换
不带参数的宏定义(即符号常量定义语句)
#define 宏名替换文本
编译时编译预处理程序自动对源程序中的“宏名”用“替换文本”来替换,即宏展开
例如:
#define LENGTH 300
#define PI
宏替换使用说明
(1)宏名一般用大写字母,以示与一般变量区别。
(2)使用宏替换的作用是提高程序的清晰性、可移植性。
(3)在同一个程序段中,同一个宏名不能重复定义。
(4)“替换文本”不能替换双引号中的字符串。
(5)“替换文本”并不替换用户标识符中的成分。
(6) 宏定义是用宏名代替一个字符串,是简单的置换,并不作语法检查。
(7) 宏定义语句末尾不能加分号,否则会连分号一起置换。
(8) 可以用#undef命令终止宏定义的作用域。
(9) “替换文本”中可以包含已定义过的宏名。
带参数的宏定义
一般形式:
#define 宏名(参数表) 字符串
说明:
“字符串”中包含“参数表”中所指定的参数。
【】带参数的宏定义。
#define DB(x) ((x)*2)
main( )
{
double y;
float z=10;
y=DB(z); /* 等价于: y= z*2; */
printf("y=%f\n",y);
}
【例】
#define abs(x) (((x)>0)?(x):(-(x)))
main( )
{
int a=-3,b;
float c=-,d;
b=abs(a);
d=abs(c);
printf("b=%d,d=%f\n",b,d);
}