预处理器指令

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 进行两次修改非常令人惊讶之外,这也是未定义的行为,因为这两次修改没有排序。

【讨论】:

以上是关于预处理器指令的主要内容,如果未能解决你的问题,请参考以下文章

笔记2:预处理器-预处理指令

C#预处理器指令

C#预处理器指令 ,你造吗??? (●'?'●)

C ++中的宏指令和预处理器指令有啥区别[重复]

预处理器宏扩展为另一个预处理器指令

Objective-C 预处理器指令