关于max(a,b)宏定义的问题
使用宏来实现一个max的版本,max的参数都是整数,要求在max宏的定义中这些整形参数只被求一次。一般来说
#define max(a,b) ((a)>(b)?(a):(b))
但是这在判断的时候使用了一次,在取值的时候又求了一次。当参数有副作用的时候,可能会出一些问题。
我觉得这个有点难了。求大神出现。
#define max( a, b ) \ ({ typeof ( a ) _a = ( a ); \ typeof ( b ) _b = ( b ); \ _a > _b ? _a : _b; })
#include <stdio.h> #define max( a, b ) \ ({typeof ( (a) ) _a = ( a ); \ typeof ( (b) ) _b = ( b ); \ _a > _b ? _a : _b;}) int main(void) { int x, y,z; x = 5; y = 6; z = max(x++, ++y); printf("%d",z ); return 0; }
[此贴子已经被作者于2017-7-18 12:29编辑过]