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])))

 

posted on 2020-03-10 17:39  猪伯  阅读(780)  评论(0编辑  收藏  举报

导航