C++ define 的用法
【题目2-2】用#define 实现宏求最大值和最小值
#define MAX(x,y) (((x)>(y))?(x):(y)) #define MIN(x,y) (((x)<(y))?(x):(y))
在宏中需要把参数小心地用括号括起来,因为宏只是简单的文本替换,如果不注意,很容易引起歧义
【题目2-3】要注意宏定义的歧义
1 #include <stdio.h> 2 #define SQR(x) (x*x) // #define SQR(x) ((x)*(x)) 3 int main(){ 4 int a,b=3; 5 a = SQR(b+2); 6 printf("a=%d\n",a); 7 return 0; 8 }
宏只做简单的文本替换,所以一定要注意括号的使用。如 Line 2, 当 x = b+2 时候,Line 5, a = b+2 * b+2 = 14, 而程序员本意是 (b+2)^ 2 = 25, 针对这种的情况的修改,应该是Line 2 中注释所描述 ((x)*(x))
【题目2-4】宏用于字符串操作
1 #include<stdio.h> 2 #define STR(s) #s 3 #define CONS(a,b) (int)(a##e##b) 4 int main(){ 5 printf(STR(vck)); // vck 6 printf("\n"); 7 printf("%d\n",CONS(2,3)); // 2000 8 return 0; 9 }
# 把 宏参数 变成一个字符串;## 把两个宏参数粘合在一起
Line 2 STR(s) 定义的是一个参数 s 表示的字符串
Line 3 CONS(a,b) 定义的是一个将参数 a 与 b 按 aeb 连接起来的一个整数,2e3=2000
【题目2-5】用宏定义得到一个字的高位和低位
1 #define WORD_LOW(x) ((byte)((x)&255)) 2 #define WORD_HIGH(x) ((byte)((x)>>8))
【题目2-6】用宏定义得到一个数组所含的元素个数
1 #define ARR_SIZE(a) (sizeof((a))/sizeof((a[0])))