Pre And Post Increment Operator Output

  • Thread starter Yogesh Yadav Pacheria
  • Start date
Y

Yogesh Yadav Pacheria

I tried this Code

int main()
{
int i = 0;
i = ++i + ++i + ++i;
printf("%d",i);
}

Output should be 6

But In GCC it's 7

How and plz tell the order of evalution of pre and post bot

Thanks in Advance
 
P

Paul N

I tried this Code

int main()
{
   int i = 0;
   i = ++i + ++i + ++i;
   printf("%d",i);

}

Output should be 6

But In GCC it's 7

How and plz tell the order of evalution of pre and post bot

Thanks in Advance

The FAQ is at http://c-faq.com/ . Read it, you'll learn a lot from it.
 
A

Andrew Cooper

I tried this Code

int main()
{
int i = 0;
i = ++i + ++i + ++i;
printf("%d",i);
}

Output should be 6

But In GCC it's 7

How and plz tell the order of evalution of pre and post bot

Thanks in Advance

You have provided a program which tries to update i more than once in a
sequence point. This is strictly undefined by the C spec, so the
compiler is free to interpret it how it likes.

The disassembly (from GCC 4.6.3) looks a little like:

movl $7, %esi
movl $.LC0, %edi # String "%d\n"
movl $0, %eax
call printf

So what happens is that GCC calculates the value of i at compile time
and sticks it in as a constant.

~Andrew
 
B

BartC

Yogesh Yadav Pacheria said:
I tried this Code

int main()
{
int i = 0;
i = ++i + ++i + ++i;
printf("%d",i);
}

Output should be 6

But In GCC it's 7

How and plz tell the order of evalution of pre and post bot

I agree it ought to be 6. Other C compilers, and even one or two other
languages, give a result of 6.

But C allows compilers to evaluate expressions their own way, which may give
undefined results when a variable is modified several times in the same
expression. GCC must be one of those compilers that takes full advantage of
that.

So you will have to rearrange the expression into separate statements (if it
ever did anything useful to start with..).
 
K

Keith Thompson

Yogesh Yadav Pacheria said:
I tried this Code

int main()
{
int i = 0;
i = ++i + ++i + ++i;
printf("%d",i);
}

Output should be 6

But In GCC it's 7

How and plz tell the order of evalution of pre and post bot

You've already been directed to the C FAQ, particularly section 3, which
explains why your assumption that the output should be 6 is meaningless.

There are some other (fairly) minor problems with your code:

You need "#include <stdio.h>" in any program that calls printf.

"int main()" should be "int main(void)".

You should print a newline at the end of the output:

printf("%d\n", i);

You should have a "return 0;" at the end of the program. It's not
necessary if your compiler conforms to C99 or later, but it's a good
idea.

The real problem is this: whatever

i = ++i + ++i + ++i;

was *intended* to do, there is certainly a better and clearer way to
write it -- even its behavior were well defined (as it is in some
languages).
 
B

BartC

Eric Sosman said:
On 6/21/2012 5:08 PM, BartC wrote:

Nitwit.

Yet, given the OP's program, and a randomly assigned but unknown compiler,
what result would you put your money on, if you were obliged to gamble?

And once you know the result, would you gamble on the same compiler giving
the exactly the same answer one more time?
 
K

Keith Thompson

BartC said:
Yet, given the OP's program, and a randomly assigned but unknown compiler,
what result would you put your money on, if you were obliged to gamble?

Fortunately, we are not obliged to gamble.
And once you know the result, would you gamble on the same compiler giving
the exactly the same answer one more time?

What would be the point? Don't waste time guessing what the code might
do for a given implementation. Just fix it.
 
E

Eric Sosman

Yet, given the OP's program, and a randomly assigned but unknown compiler,
what result would you put your money on, if you were obliged to gamble?

Nitwit.
 
Y

Yogesh Yadav Pacheria

I am new to see and wanna learn it deeply

Could u guyz tell me some good books or web links
 
M

Mark Bluemel

I am new to see and wanna learn it deeply

Hmmm... And your first question to the group consists of a rather
convoluted and contrived example of pre- and post- increments.
Could u guyz tell me some good books or web links

If you're serious (and I have some doubts) section 18 of the FAQ
(http://c-faq.com) has pointers to some resources.
 
H

Heinrich Wolf

Yogesh Yadav Pacheria said:
I tried this Code

int main()
{
int i = 0;
i = ++i + ++i + ++i;
printf("%d",i);
}

Output should be 6

But In GCC it's 7

How and plz tell the order of evalution of pre and post bot

Thanks in Advance

Hi,

I find it unreasonable to use such code in serious projects.
My old Turbo C 2.0 prints 9 and so does my Borland C++ Builder 5.
I do not care why.

kind regards
Heiner
 
B

BartC

Keith Thompson said:
What would be the point? Don't waste time guessing what the code might
do for a given implementation. Just fix it.

OK, so we fix it so that the result is ....? Any guesses?

Changing the erroneous code so that it stays within the rules:

int i = 0;
int t1,t2,t3;

t1=++i;
t2=++i;
t3=++i;
i=t1+t2+t3;
printf("%d",i);

Now gives a valid result. Which happens to coincide with the OP's
expectations, and with what I said it *ought* to be (for which I was called
a 'nitwit', even though I went on to explain why the OP wasn't getting that
result), and in fact with what most of my compilers were already giving me
anyway; presumably they were already using code along the same lines!)

However, the interesting question is, why anyone - outside c.l.c obviously -
might think the output of the OP's original code might be 6, rather than any
other number (or any other manifestation, according to previous threads
along the same lines).

Or, are we not allowed to think or guess anything at all, simply because the
C standard says the original expression has undefined behaviour?
 
I

Ian Collins

I tried this Code

int main()
{
int i = 0;
i = ++i + ++i + ++i;
printf("%d",i);
}

Output should be 6

But In GCC it's 7

How and plz tell the order of evalution of pre and post bot

Thanks in Advance

Is this question auto-generated by a cron job somewhere?
 
M

Mark Bluemel

Is this question auto-generated by a cron job somewhere?

With a set of Lex scripts to generate varying English syntax? I note
that the Jive/Valley Girl/Swedish Chef/Pig Latin translator is available
on the web - someone must have a txtspk version...
 
B

BartC

Noob said:
Intentionally or not, a large number of BartC's posts are troll-ish.
For this reason, I send his messages to the bit bucket.

For the information of anybody else, my posts are not intentionally anything
of the kind.

My first post in a thread might sometimes offer a different point of view,
or a more casual approach, but quite often that gets picked up, and I feel
obliged to defend my position.

Let me apologise here to all those who've had to read all my nonsense in the
past.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top