> Anyway ,just one more thing, what is the order of expression
> evaluation in gcc.
> Left->Right ? or opposite?

No idea. And not even sure if it remains same across targets.

Anyway, if your'e curious, try this:
int f1()
{
cout << "1" << endl;
return 1;
}

int f2()
{
cout << "2" << endl;
return 2;
}

int x = fun1() + fun2();

What does the above print? 12 or 21?
Make sure you disable all compiler optimizations

>
>
>
> On Jul 20, 6:40 am, Syam Krishnan <sya...@gmail.com> wrote:
> > On 07/17/2011 07:14 PM, Rahul Menon wrote:
> >
> > > According to this expression like
> > >    i++ * i++
> >
> > > and
> >
> > >    i = i++
> > > all have undefined behavior in C.
> > > I thought these were among those 'tricky' questions (when these
> > > expressions were combined with printf functions) asked during
> > > interview and definitely expected to be having very much defined
> > > behavior!
> >
> > No.. Their behaviour is 'undefined'.
> >
> > The ISO C language standard specifies 'undefined behaviour' as:
> >
> > " behavior, upon use of a nonportable or erroneous program construct or
> > of erroneous data,
> > for which this International Standard imposes no requirements
> > NOTE Possible undeļ¬ned behavior ranges from ignoring the situation
> > completely with unpredictable
> > results, to behaving during translation or program execution in a
> > documented manner characteristic of the
> > environment (with or without the issuance of a diagnostic message), to
> > terminating a translation or
> > execution (with the issuance of a diagnostic message)."
> >
> > Typically, you'll get different results from different compilers. But
> > there aren't any guarantees. Even with the same compiler,
> > it's free to do whatever it wants for such code.
> >
> > In C and C++ (2003), the important concept is 'sequence points' that
> > specifies whether such code is valid or not. In the latest revision of
> > the C++
> > standard (generally called C++0x), the concept of 'sequence points' has
> > been replaced with arguably clearer 'sequenced after' and 'sequenced
> > before' 'relations'.
> >
> > > I think according to them , their answer should be probably with
> > > respect to gcc compiler.
> >
> > Actually, more probably for TurboC or BorlandC compiler :)
> > Gcc (v 4.6.0) generates an 'undefined behaviour' warning for stuff like:
> > i = i++.
> >
> > > Anyway have anyone come across this thing any time during their
> > > programming days.. Please throw some light regarding this!
> >
> > All the time! I'll give you some common examples of undefined behaviour
> > that I commonly see (mostly in legacy code):
> >
> > int i;
> > short s;
> > float f;
> > double d;
> >
> > 1. Signed integer overflow
> > 2. printf("%d", f);
> > 3. scanf("%d", &s);
> > 4. scanf("%d", &d);
> > 5. Writing to one member of a union and then reading from another
> > (surprised?, anyway, this one's a bit special)
> >
> > regards,
> >
> > Syam
>
> --
> "Freedom is the only law".
> "Freedom Unplugged"
> http://www.ilug-tvm.org
>
> You received this message because you are subscribed to the Google
> Groups "ilug-tvm" group.
> To control your subscription visit
http://groups.google.co.in/group/ilug-tvm/subscribe
> To post to this group, send email to ilug-tvm@googlegroups.com
> To unsubscribe from this group, send email to
> ilug-tvm-unsubscr...@googlegroups.com
>
>
>
> For details visit the google group page:
http://groups.google.com/group/ilug-tvm?hl=en

-- 
"Freedom is the only law". 
"Freedom Unplugged"
http://www.ilug-tvm.org

You received this message because you are subscribed to the Google
Groups "ilug-tvm" group.
To control your subscription visit 
http://groups.google.co.in/group/ilug-tvm/subscribe
To post to this group, send email to ilug-tvm@googlegroups.com
To unsubscribe from this group, send email to
ilug-tvm-unsubscr...@googlegroups.com



For details visit the google group page: 
http://groups.google.com/group/ilug-tvm?hl=en

Reply via email to