Reputation: 211
when i am using #define
function,I observe something bizarre.
In the below code if I gave i
value as '10'
from input i
got the output as 132
. However if I declare i=10
by commenting 10,12 and 13 lines then my output is 144
. can anyone explain me how this is happening?
thanks in advance
#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;
}
Upvotes: 2
Views: 197
Reputation: 58291
Double(++i)
will expand to ++i * ++i
. In this expression, i
is modified twice without an intervening sequence point, which is undefined behavior.
Read: So, what's wrong with using macros?
Upvotes: 6
Reputation: 1717
Macro's have subtleties.
What your macro does is:
Double(++i) -> ++i*++i
in your case 11*12 or 12*11
Upvotes: -1
Reputation:
What you have is undefined behaviour.
You Double(++i)
is changed to ++i * ++i
, when you compile you code.
Upvotes: 1