gpt4 book ai didi

c++ - C、C++预处理器宏

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:34 25 4
gpt4 key购买 nike

谁能解释一下这是如何工作的

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com