预处理器指令

时间:2014-12-03 10:51:54

标签: c macros c-preprocessor preprocessor-directive

我无法理解以下代码的输出有人可以帮帮我吗?

#define PRODUCT(x) (x*x)
main()
{
     int i=3,j,k;
     j=PRODUCT(i++);
     k=PRODUCT(++i);
     printf("\n %d%d",j,k);
}

对于上面我得到的输出为:

  

9和49

我无法理解49会是什么以及我何时评论

k=PRODUCT(++i);

我输出为25。 不知道程序中发生了什么

1 个答案:

答案 0 :(得分:1)

宏进行文本替换。 PRODUCT(i++)扩展为(i++*i++)。除了非常令人惊讶的是,现在有i的两个修改,这也是未定义的行为,因为这两个修改没有排序。