C语言中#define用法总结:
1、简单的宏定义
#define标识符替换列表(替换列表可以是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量。注意:替换列表是可以为空的)。
典型错误:
#defineN=100
inta[N];/*这样会成为inta[=100],这里会处理成为一种标识记号一样*/
#defineN100;
inta[N];/*带分号的定义会成为inta[100;],这是一种很常见的错误*/
#definepin(int*);
pina,b;
int*a,b;/*本意是a和b都是int型指针,但是实际上变成int*a,b;a是int型指针,而b是int型变量。这是应该使用typedef来代替define,这样a和b就都是int型指针了。*/
2、带参数的宏
#define标识符(x1,x2,x3...xn)替换列表(注意:x1,x2,x3..是宏的参数,标识符和其左括弧之间不能有空格)
使用方法:
#defineMAX(x,y)((x)>(y)?(x):(y))
i=MAX(j+k,m-n);
3、宏的特殊单行定义
#defineA(x)T_##x
#defineB(x)#@x
#defineC(x)#x
x=1
替换为:
A(1)------>T_1(T_##x,##符号是记号粘黏符号,将前后的字符粘黏起来。)
B(1)------>'1'(#@x,#@符号会将宏的参数进行字符串字面量化,并且加‘’号)
C(1)------>"1"(#x,#符号会将宏的参数进行字符串字面量化,并且加""号)
4、define的多行定义
define可以替代多行的代码,在每一个换行的时候加上一个"\"
#defineMAX(X,Y)do{\
语句1;\
语句2;\
/*注释的写法*/\
}while(0)/*(notrailing;)*/\