预处理器指令
Posted
技术标签:
【中文标题】预处理器指令【英文标题】:Preprocessors Directives 【发布时间】:2014-12-03 10:51:54 【问题描述】:我无法理解以下代码的输出,有人可以帮帮我吗?
#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。 不知道程序是怎么回事
【问题讨论】:
啊。完美的未定义行为... 当您不理解包含宏的代码时,第一步是手动扩展它们。 (如果你完全使用宏,当然——你不应该这样做。) ***.com/questions/4176328/… 的可能重复项 【参考方案1】:宏进行文本替换。 PRODUCT(i++)
扩展为 (i++*i++)
。除了对i
进行两次修改非常令人惊讶之外,这也是未定义的行为,因为这两次修改没有排序。
【讨论】:
以上是关于预处理器指令的主要内容,如果未能解决你的问题,请参考以下文章