笔记列表 使用#define含参时,参数括号很重要,如上例中省略括号会导致运算错误: #include <stdio.h> #define square(x) ((x) * (x)) #define square_1(x) (x * x) int main(void) { printf("square 5+4 is %d\n", square(5+4)); printf("square_1 5+4 is %d\n", square(5+4)); return 0; } 输出结果为: square 5+4 is 81 square_1 5+4 is 29 原因: square 等价于 (5+4)*(5+4)=81 square_1 等价于 5+4*5+4=29 /////////////////////////////////////////// 用#define宏定义将a,b交换,不使用中间变量,两种方法实现swap(x,y); #include <stdio.h> #define MAX(x,y) ((x>y)?(x):(y)) #define SWAP1(x,y) {x=x+y;y=x-y;x=x-y;} #define SWAP2(x,y) {x=x^y;y=x^y;x=x^y;} int main() { int a,b; scanf("%d %d",&a,&b); printf("Max number is:%d\n",MAX(a,b)); printf("交换前:x=%d,y=%d\n",a,b); SWAP1(a,b); printf("交换后:x=%d,y=%d\n",a,b); SWAP2(a,b); printf("再次交换后:x=%d,y=%d\n",a,b); return 0; } 输出结果为: 2 4 Max number is:4 交换前:x=2,y=4 交换后:x=4,y=2 再次交换后:x=2,y=4