本文参考国外的一个论坛中对(void)(&_min1 ==&_min2)的讨论
说明:
这是个空操作,就是为了做一个类型检查,使用警告的副作用打印输出信息
现做以下测试
编写type_check.c如下
注意变量类型:
a与c的类型相同,a 与 b 的类型不同
#include <stdio.h>
#define min(x, y) ({ \
typeof(x) _min1 = (x); \
typeof(y) _min2 = (y); \
(void) (&_min1 == &_min2); \
_min1 < _min2 ? _min1 : _min2; })
int main()
{
int a = 1;
long b = 3;
int c = 9;
int min_data_a_b,min_data_a_c;
min_data_a_b = min(a,b);
min_data_a_c = min(a,c);
printf("the min of a & b =%d\n",min_data_a_b);
printf("the min of a & c =%d\n",min_data_a_c);
return 0;
}
然后执行:
gcc -o type_check type_check.c
打印输出信息如下:
执行
./type_check
输出结果为:
the min of a & b =1
the min of a & c =1