关于预处理详解 #define 宏 #和##
#和##
#运算符
#运算符将宏的⼀个参数转换为字符串字⾯量。它仅允许出现在带参数的宏的替换列表中。
#运算符所执⾏的操作可以理解为”字符串化“。
当我们有⼀个变量 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;
}
这样写起来太繁琐了,现在我们这样写代码
完整代码