user2413497
user2413497

Reputation: 211

error with define macro definition

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

Answers (3)

Grijesh Chauhan
Grijesh Chauhan

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

Enigma
Enigma

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

user1944441
user1944441

Reputation:

What you have is undefined behaviour.

You Double(++i) is changed to ++i * ++i, when you compile you code.

Upvotes: 1

Related Questions