为什么这个程序输出4?

Tus*_*har -3 c

使用define preprocessor指令为什么以下程序输出4而不是3?

#include <stdio.h>
#define MAX(A,B)((A)>(B)) ? A : B

int max_t(int a, int  b)
{
  return ((a)>(b)) ? a : b; 
}

int main()
{
  int i=1;
  int j=2;
  int val = MAX(++i, ++j); // this outputs 4 but why?
  //int val = max_t(++i, ++j);
  printf("%d\n", val);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Osi*_*ris 7

宏只是代币的替代品

MAX(++i, ++j);
Run Code Online (Sandbox Code Playgroud)

扩展到

((++i) > (++j)) ? ++i : ++j;
Run Code Online (Sandbox Code Playgroud)

如您所见,在这种情况下,参数被评估(并递增)两次,因此输出为4.