问题描述
这个问题是问我在模拟面试......真的得惊讶地发现尴尬的答案......
This question was asked to me in a mock interview...Really got surprised to find awkward answers...
考虑宏:
#define SQR(x) (x*x)
例1:
SQR(2) //prints 4
例2:
如果SQR(1 + 1)被赋予它不总结(1 + 1)
到 2
而是......
If SQR(1+1) is given it doesn't sum (1+1)
to 2
but rather ...
SQR(1+1) //prints 3
尴尬吧?是什么原因?这是如何code的工作?
Awkward right? What is the reason? How does this code work?
请注意:我搜索左右,但找不到任何有关问题。如果有任何好心请与大家共享!
NOTE: I searched SO but couldn't find any relevant questions. If there are any kindly please share it!
推荐答案
SQR(1 + 1)
扩展到 1 + 1 * 1 + 1
这是3,不是4,正确吗?
SQR(1+1)
expands to 1+1*1+1
which is 3, not 4, correct?
宏观的正确定义是
#define SQR(x) ((x)*(x))
这将扩展为(1 + 1)*(1 + 1)
和更重要,你展示了你不应该的原因之一并不需要它们的地方'T使用宏。以下是更好的:
which expands to (1+1)*(1+1)
and, more important, shows you one of the reasons you shouldn't use macros where they aren't needed. The following is better:
inline int SQR(int x)
{
return x*x;
}
此外: SQR(我++)
将未定义行为如果 SQR
是一个宏,完全正确的,如果 SQR
是一个函数。
Furthermore: SQR(i++)
would be undefined behavior if SQR
is a macro, and completely correct if SQR
is a function.
这篇关于通过在平方c宏SQR困惑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!