1. 宏函数定义的时候需要加({ })
比如:
#include <stdio.h>
#define swap(a, b) ({(a)=(a)+(b);\
(b)=(a)-(b);\
(a)=(a)-(b);})
int main(int argc, const char *argv[])
{
int array[2] = {10, 20};
printf("array[0] = %d;array[1] = %d\n", array[0], array[1]);
swap(array[0], array[1]);
printf("array[0] = %d;array[1] = %d\n", array[0], array[1]);
return 0;
}
此函数的说明:
a = a + b;
b = a - b; // b = (a + b) - b = a;
a = a - b; // a = (a + b) - (a) = b;
宏函数中为了避免swap(10+3, 12) ,这种情况的出现,应该采用这种方案:
要搞定它其实很简单,别吝啬括号就行了。
2. 宏函数相似返回值的实现
#include <stdio.h>
#define swap(a, b) ({(a)=(a)+(b);\
(b)=(a)-(b);\
(a)=(a)-(b);\
a;})
int main(int argc, const char *argv[])
{
int array[2] = {10, 20};
int temp = 0;
printf("array[0] = %d;array[1] = %d\n", array[0], array[1]);
temp = swap(array[0], array[1]);
printf("array[0] = %d;array[1] = %d\n", array[0], array[1]);
printf("swap = %d\n", temp);
return 0;
}
在 swap 中,整体的值是最后一个元素的值
即 a 的值