了解#define用法中的副作用

use*_*108 1 c

我指的是这个问题

#define max(a,b) ((a<b)?b:a)

这会产生一些副作用,如答案所述;

如果您使用max(a ++,b ++)作为示例(a或b将增加两次),则会出现副作用

我无法理解这种副作用; 当我们使用max(a ++,b ++)时,为什么a或b会递增两次?

小智 7

如果你max(a++,b++)在这样的代码中使用,

x = max(a++,b++);
Run Code Online (Sandbox Code Playgroud)

文本替换发生为

x = ((a++<b++)? b++ : a++);
      ^   ^     ^---------Increment if condition is true
      |---|---------Increment
Run Code Online (Sandbox Code Playgroud)

所以,你会被递增或者ab两次...