以下宏可能给应用程序带来哪些问题?

joe*_*han 1 c c++ macros

以下宏可以带来问题吗?

#define sq(x) x*x
Run Code Online (Sandbox Code Playgroud)

如果是,那么如何以及为什么?请帮助.

Cor*_*lks 9

是的,它可能会带来问题.除了明显的事实,宏根本不尊重命名空间(这意味着你不能调用任何其他东西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)

这是宏的固有问题,并且是内联函数应该是首选的一个原因.