C/C++ 中不乏不良或危险的类似函数的宏的示例。
#define SQUARE(x) x * x
printf("%d", SQUARE(4)); //16
printf("%d", SQUARE(3+1)); //7
#undef SQUARE
#define SQUARE(x) (x) * (x)
printf("%d", 36/4); //9
printf("%d", SQUARE(6)/SQUARE(2)); //36
#undef SQUARE
#define SQUARE(x) ((x) * (x))
int x = 3;
++x;
printf("%d", SQUARE(x)); //16
int y = 3;
printf("%d", SQUARE(++y)); //?
#undef SQUARE
鉴于类函数宏的问题,它们有哪些好的/谨慎/推荐使用的例子?
是否有任何时候类似函数的宏比函数更可取?
我想这一定有一些非常好的案例,否则预处理器制造商会让他们的工作变得更容易而将它们排除在外。