第10章编译预处理与位运算10
1编译预处理编译预处理:是在编译前由编译系统中的预处理程序对源程序的预处理命令进行加工
源程序中的预处理命令均以“#”开头,命令末尾不加分号,它们可以写在程序中的任何位置,作用域是从出现位置开始到源程序的结束
1宏定义宏定义是定义一个标识符来代替一个字符串
宏定义有不带参数的宏定义和带参数的宏定义两种
1.不带参数的宏定义定义形式:#define标识符字符串功能:用一个指定的标识符(即名字,称为宏名)来代表一个字符串
例如:#definePI3
1415926说明:(1)与其他标识符相区别,宏名一般用大写字母表示
(2)编译预处理时,将程序中的宏名用字符串代替,这种将宏名替换成字符串的过程称为“宏展开”
(3)使用宏可以减少程序中重复书写或修改某些字符串的工作量
(4)在程序中出现在双引号中或其他字符串中与宏名相同的字符串,不能作为宏处理
(5)#define命令的作用范围从定义位置至源程序结束,但可以用#undef终止其作用域
例1:#definePI3
1415926main(){floatl,s,r;scanf("%d",&r);l=2
0*PI*r;s=PI*r*r;printf("l=%f\n",l);printf("s=%f\n",s);}main(){floatl,s,r;scanf("%d",&r);l=2
1415926*r;s=3
1415926*r*r;printf("l=%f\n",l);printf("s=%f\n",s);}展开10
1宏定义例2:#definePI3
1415926main(){…}#undefPIfun(){…}10
1宏定义10
1宏定义(6)宏定义时,可以引用已定义的宏名,编译时层层展开
例3:#definePI3
1415926#defineR3
0#defi