-
简单写法:
#define max(a,b) ((a) >= (b) ? (a) : (b))
缺点:这种写法会造成变量_a 或 _b 被重复求值两次,比如
max(i++, j++) 会被解释为 ((i++) >= (j++) ? (i++) : (j++))
-
更好的写法:
#define max(a, b) \ ({ \ typeof(a) _a = (a); \ typeof(b) _b = (b); \ _a >= _b ? _a : _b; \ })
优点:能保证变量 _a 和 _b 只被求值一次,
缺点:但是需要注意,因为存在变量声明,还是可能会出现变量覆盖的情况。
原因如下:int _a = 1, _b = 2, c; c = max(_a, _b); 会被解释为 c = ({int _a = (_a); int _b = (_b); _a >= _b ? _a: _b;});
c语言 max 和 min 的宏写法
最新推荐文章于 2024-08-05 21:03:06 发布