【发布时间】:2014-01-23 06:24:33
【问题描述】:
为了获得最多两个数字,我有以下宏
#define max(a,b) ((a) > (b) ? (a) : (b))
#define maxint(a,b) ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
以上两者有什么区别。哪个更好用,为什么。 我找到了这些宏的信息here。但是看不懂。
【问题讨论】:
-
想想预处理器用
max(++i, --j)生成了什么。并且 都不 是“安全的”,但后者不太容易出现与宏参数扩展相关的副作用。 -
第二个更安全。例如致电
max(i++,j++)或就此而言,max(fn1(),fn2()) -
请注意,第二个宏使用
gcc扩展(将块语句视为表达式),因此不可移植。 -
查看您提供的参考资料“#define max(a,b) ((a) > (b) ? (a) : (b)) 但是这个定义计算 a 或 b 两次,用如果操作数有副作用,结果会很糟糕。”
-
@Chinna,考虑去掉“linux”标签吗?
标签: c gcc c-preprocessor