定义宏定义时出错

时间:2013-06-11 07:20:59

标签: c++

当我使用#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;
}

3 个答案:

答案 0 :(得分:6)

Double(++i)将扩展为++i * ++i。在此表达式中,i被修改两次而没有介入sequence point,这是未定义的行为

阅读:So, what's wrong with using macros?

答案 1 :(得分:1)

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

编译代码时,Double(++i)已更改为++i * ++i

答案 2 :(得分:-1)

宏有微妙之处。 你的宏做的是: Double(++i) -> ++i*++i

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