I am Anwar as a intermediate level currently programming practice in c, c++ and java . In following programs I confused in these expressions that expressions are same but result are different on these results few teachers said it is the problem of compilers.

In Turbo C 3.0

main()
{
[INDENT]int x=-250;[/INDENT]
[INDENT]x = --x + --x + --x;[/INDENT]
[INDENT]printf("%d",x);[/INDENT]
}//[B]it give -259[/B]

In Visual C++ 6.0

#include<iostream>
using namespace std;
main()
{
[INDENT]int x=-250;[/INDENT]
[INDENT]x = --x + --x + --x;[/INDENT]
[INDENT]cout <<x; [/INDENT]
}//[B]it give -257[/B]

In Java 1.3

class Test
{
public static void main(String abc[])
{
[INDENT]int x=-250;[/INDENT]
[INDENT]x = --x + --x + --x;[/INDENT]
[INDENT]System.out.print(x); [/INDENT]
}//[B]it give -256[/B]

> on these results few teachers said it is the problem of compilers.
No, it's a problem with the teachers not knowing the language rules well enough.

For C and C++, multiple side effects on the same variable has ALWAYS BEEN UNDEFINED.
What does that mean, it means the compiler is free to interpret it however it wants (or maybe even not at all). Any answer you get is just like rolling a dice.
http://c-faq.com/expr/index.html
- my answer is -256
- your answer is -257
- his hard disk has been reformatted.

As for Java, I've no idea whether the Java standard makes any claims about the evaluation order. It's certainly not comparable to C or C++.

The bottom line is that the code is broken. Don't use such constructs in your program, and don't waste time trying to figure out the mysteries of how your compiler seems to work.

This article has been dead for over six months. Start a new discussion instead.