谁能解释一下这是如何工作的
#define maxMacro(a,b) ( (a) > (b) ) ? (a) : (b)
inline int maxInline(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int i = 1; j = 2, k = 0;
k = maxMacro(i,j++); // now i = 1, j = 4 and k = 3, Why ?? Where is it incremented ?
//reset values
i = 1; j = 2, k = 0;
k = maxInline(i,j++); // now i = 1, j = 3, and k = 2, Why ??
return 0;
}
所以,我想知道 j 的值到底在哪里递增,同时检查 条件或返回时或调用时?
- 一个。使用宏
- b。使用内联方法
更新: 感谢大家,现在我明白了这一点。但出于好奇,为什么有人会在调用方法时执行 j++,为什么在调用方法后不增加 j,这样就不会那么困惑了。我在某处看到这段代码所以问它!!
最佳答案
问题是预处理器只对宏进行直接文本替换。
maxMacro(i, j++)
成为
( (i) > (j++) ) ? (i) : (j++)
如您所见,当 j 较大时,它会递增两次。
这正是您应该更喜欢内联函数而不是宏的原因。
关于c++ - C、C++预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263607/