以下宏可以带来问题吗?
#define sq(x) x*x
Run Code Online (Sandbox Code Playgroud)
如果是,那么如何以及为什么?请帮助.
是的,它可能会带来问题.除了明显的事实,宏根本不尊重命名空间(这意味着你不能调用任何其他东西sq),请尝试以下方法:
int result = sq(4) / sq(4);
Run Code Online (Sandbox Code Playgroud)
你应该x * x用括号括起来,这样它就变成了((x) * (x)).
另一个问题:
int a = 0;
int result = sq(++a);
Run Code Online (Sandbox Code Playgroud)
这是宏的固有问题,并且是内联函数应该是首选的一个原因.