C语言#define预处理
#define简介
C语言里可以用#define定义一个标识符来表示一个常量。特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了,也不做类型定义。预编译又叫预处理。预编译就是编译前的处理。这个操作是在正式编译之前由系统自动完成的。
#define又称宏定义,标识符为所定义的宏名,简称宏。标识符的命名规则和变量的命名规则是一样的。#define的功能是将标识符定义为其后的常量,一经定义,程序中就可以直接用标识符来表示这个常量,也就是文本替换。变量名表示的是一个变量,但宏名表示的是一个常量,可以给变量赋值,但绝不能给常量赋值。
宏定义最大的好处是方便程序的修改。使用宏定义可以用宏代替一个在程序中经常使用的常量。这样,当需要改变这个常量的值时,就不需要对整个程序一个一个进行修改,只需修改宏定义中的常量就行了。且当常量比较长时,使用宏就可以用较短的有意义的标识符来代替它,这样编程的时候就会更方便,不容易出错。因此,宏定义的优点就是方便和易于维护。
#define无参形式
#define宏定义无参的一般形式为:#define 标识符 常量
注意最后没有分号,因为宏不是语句,结尾不用加分号,否则会被替换进进程中。还有一点就是宏名最好用大写字母加下划线组成,以此来区分变量名。
来看一个#define宏定义无参的例子:
#include<stdio.h>
#define PI 3.1415926//标识符或宏名叫PI 常量是个浮点型 作用是圆周率
#define R 2//标识符或宏名叫R 常量是个整型 作用是圆的半径
#define PRINT "半经为2的圆 面积=%lf\n"//标识符或宏名叫PRINT 常量是个字符串 作用是代替了printf()函数的第一个参数
int main()
{
printf(PRINT,PI*R*R);//在这里PRINT被替换成"半经为2的圆 面积=%lf" PI被替换成3.1415926 R被替换成2
printf("半经为2的圆 面积=%lf\n",3.1415926*2*2);//这句是上面一句代码替换后的代码
return 0;
}
#define有参形式
#define宏定义有参的一般形式为:#define 标识符(参数表) 表达式
带参数的宏定义,宏名中不能有空格,宏名与形参表之间也不能有空格,而形参表中形参之间可以有空格。
来看一个#define宏定义有参的例子:
#include<stdio.h>
#define SQUARE(x) x*x//标识符或宏名叫SQUARE 表达式是x*x 作用是算x的平方
int main()
{
printf("%d %d\n",SQUARE(3),SQUARE(4));//SQUARE(3)被替换成3*