分类:
2011-06-15 15:34:44
include/linux/kernel.h
(void) (&_x == &_y) ------------------------------------------------------ #include/* 使用该宏时,如果不关心返回值,没有圆括号()也可以,但是{}是必须的 */ #define min(x, y) { \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ (void) (&_min1 == &_min2); \ _min1 < _min2 ? _min1 : _min2; } int main () { min(10, 20); if (1) min(10, 20); return 0; } ------------------------------------------------------ #include /* * 用该宏时,如果关心返回值,就必须要圆括号() * 最后一句是该宏的返回值 */ #define min(x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ (void) (&_min1 == &_min2); \ _min1 < _min2 ? _min1 : _min2; }) int main () { int ret; ret = min(10, 20); printf("ret = %d\n", ret); return 0; } ------------------------------------------------------ #include /* * 检测变量类型是否相同 * (void) (&_min1 == &_min2); */ #define min(x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ (void) (&_min1 == &_min2); \ _min1 < _min2 ? _min1 : _min2; }) int main () { int ret; int i; char j; ret = min(i, j); printf("ret = %d\n", ret); return 0; } ------------------------------------------------------ #include /* * 防止类似i++类型的参数,被重复计算 * typeof(x) _min1 = (x); */ #define min(x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ (void) (&_min1 == &_min2); \ _min1 < _min2 ? _min1 : _min2; }) int main () { int ret; int i = 100; int j = 200; ret = min(i++, j++); printf("ret = %d\n", ret); return 0; } ------------------------------------------------------
------------------------------------------------------ |