#和##
#运算符
#运算符将宏的⼀个参数转换为字符串字⾯量。它仅允许出现在带参数的宏的替换列表中。
#运算符所执⾏的操作可以理解为”字符串化“。
当我们有⼀个变量
int a = 10;
的时候,我们想打印出:
the value of a is 10
.
就可以写:
#define PRINT(n) printf("the value of "#n " is %d", n);
当我们把a替换到宏的体内时,就出现了#a,⽽#a就是转换为"a",时⼀个字符串
代码就会被预处理为:
printf("the value of ""a" " is %d", a);
例子
更改后
##运算符
##
可以把
位于它两边的符号合成⼀个符号
,它
允许宏定义从分离的⽂本⽚段创建标识符
。
##
被称
为记号粘合
这样的连接
必须产⽣⼀个合法的标识符
。否则其结果就是未定义的
写⼀个函数求2个数的较⼤值的时候,不同的数据类型就得写不同的函数
int int_max(int x, int y)
{
return x>y?x:y;
}
float float_max(float x, float y)
{
return x>yx:y;
}
这样写起来太繁琐了,现在我们这样写代码
完整代码