954,500 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Plz Solve this problem...

Hi . i m new in c++ programming..plz help me in sorting out this problem.....
HOW THE VALUE OF "j" VARIES IN FOLLOWING PROBLEMS ? Plz Explain...

1. int i=10,j;
j= (i++) + (i++);
cout<

gaurav252
Newbie Poster
5 posts since Aug 2007
Reputation Points: 10
Solved Threads: 0
 

I hate it when teachers teach undefined behavior. :angry: The value of j will depend on the compiler you are using because the language does not define the behavior of i.

Ancient Dragon
Retired & Loving It
Team Colleague
30,049 posts since Aug 2005
Reputation Points: 5,662
Solved Threads: 2,343
 

But turbo C..compiler shows the value oj j in ...
1. 20
2. 22
3. 22
4. 24
But i unable to understand why its showing these values...

gaurav252
Newbie Poster
5 posts since Aug 2007
Reputation Points: 10
Solved Threads: 0
 

It's the order that the sums and increments are executed. In each expresion you listed there are different addition operations to be done and depending on what order you do them effects the result. i++/++i is shorthand for i = i + 1; If you place the ++ before the i (prefix) this is generally accepted as increment i *before* evaluating the expression, putting ++ after the i (postfix) means evaluate the expression first and increment i *afterwards*. Also placing things in parentheses generally means evaluate this part of the expression first, but I imagine they are only in this example for clarity (there's only so many +'s the human eye can take!)

hollystyles
Veteran Poster
1,182 posts since Feb 2005
Reputation Points: 262
Solved Threads: 68
 
SpS
Posting Pro
599 posts since Aug 2005
Reputation Points: 70
Solved Threads: 32
 
But turbo C..compiler shows the value oj j in ...


It doesn't matter what the compiler does. The expression is undefined so the compiler is free to do anything, like give you 0 as the result regardless of j's value, or throw a system exception, or evaluate the expression in one of the ways it could be done. That's the problem. The expression could be evaluated in more than one way and they're all equally possible. So instead of just picking one, C++ says that the whole thing is undefined and you can't change a variable more than once between sequence points.

Hamrick
Posting Whiz
325 posts since Jun 2007
Reputation Points: 180
Solved Threads: 34
 

1. j= (i++) + (i++);

Compiles to machine instructions in this order:

j = 10 + 10
i = 10 + 1
i = 11 + 1

2. and 3.

i = 10 + 1
J = 11 + 11
I = 11 + 1

4.
i = 10 + 1
i = 11 + 1
j = 12 + 12

hollystyles
Veteran Poster
1,182 posts since Feb 2005
Reputation Points: 262
Solved Threads: 68
 

But like everyone else points out it's kind of nonsense, because 1. why would you ever need to do that anyway? Obfuscation? other than that I can't think of anything. and 2. it's contrary to the standard.

hollystyles
Veteran Poster
1,182 posts since Feb 2005
Reputation Points: 262
Solved Threads: 68
 
But like everyone else points out it's kind of nonsense, because 1. why would you ever need to do that anyway? Obfuscation? other than that I can't think of anything. and 2. it's contrary to the standard.

and 3. he has an idot for a teacher.

Ancient Dragon
Retired & Loving It
Team Colleague
30,049 posts since Aug 2005
Reputation Points: 5,662
Solved Threads: 2,343
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You