宏陷阱...
我们用C来实现一个支持泛型的square()
, 嗯, 一本正经写出下边的代码...
#include <stdio.h>
#define square(x) (x) * (x)
int main(void)
{
printf("%d\n", square(2)); // 整数没问题!
printf("%lf\n", square(2.0)); // 浮点数没问题!
return 0;
}
但是万一我们写出了下边的代码... 事情就没这么简单了.
#include <stdio.h>
#define square(x) (x) * (x)
int main(void)
{
int i = 3;
printf("%d\n", square(++i)); // 不是输出16 而是25...
return 0;
}