2

当我使用#define函数时,我观察到一些奇怪的东西。在下面的代码中,如果我从输入中给出i值,则输出为. 但是,如果我通过注释 10,12 和 13 行来声明,那么我的输出是. 谁能解释一下这是怎么回事?提前致谢'10'i132i=10144

#include <iostream>
using namespace std;

#define Double(X) X*X 

int main()
{

 //int i=10;
 int i;

cout<<"Enter the i values:" <<endl;
cin>>i;

cout<<"Values is:"<<Double(++i)<<endl;

 return 0;
}
4

3 回答 3

6

Double(++i)将扩大到++i * ++i. 在这个表达式中,i被修改了两次,没有中间的序列点,这是未定义的行为

阅读:那么,使用宏有什么问题?

于 2013-06-11T07:23:06.847 回答
1

你所拥有的是未定义的行为。

当您编译代码时,您Double(++i)将更改为。++i * ++i

于 2013-06-11T07:23:06.883 回答
-1

宏有微妙之处。您的宏的作用是: Double(++i) -> ++i*++i

在你的情况下 11*12 或 12*11

于 2013-06-11T07:24:09.027 回答