宏是危险的
请预测下面代码运行输出什么?
#include <stdio.h> #define MAX(a, b) ((a) > (b) ? (a) : (b)) int main(int argc, char **argv) { int a = 4, b = 4; printf("%d", MAX(++a, b)); return 0; }
答案是5 ? 错!!!!!
看预处理后的代码吧。
int main(int argc, char **argv) { int a = 4, b = 4; printf("%d", ((++a) > (b) ? (++a) : (b))); return 0; }
所以答案是6!!
纠结了吧!!!!!
改成这样, 或许可以和宏一样的效率, 却比宏更安全。。。
#include <cstdio> template<typename T> inline T MAX(const T a, const T b) { return a > b ? a : b; } int main(int argc, char **argv) { int a = 4, b = 4; printf("%d\n", MAX(++a, b)); return 0; }
浙公网安备 33010602011771号