当我使用#define
函数时,我发现了一些奇怪的东西。
在下面的代码中,如果我从输入i
中将'10'
值设为i
,则输出为132
。但是,如果我通过评论10,12和13行声明i=10
,那么我的输出为144
。谁能解释我这是怎么回事?
提前谢谢
#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;
}
答案 0 :(得分:6)
Double(++i)
将扩展为++i * ++i
。在此表达式中,i
被修改两次而没有介入sequence point,这是未定义的行为。
答案 1 :(得分:1)
你所拥有的是未定义的行为。
编译代码时,Double(++i)
已更改为++i * ++i
。
答案 2 :(得分:-1)
宏有微妙之处。
你的宏做的是:
Double(++i) -> ++i*++i
在您的情况下11 * 12或12 * 11