It's great to get so much views about this.

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



On Jul 20, 6:40 am, Syam Krishnan <[email protected]> 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 undefined 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 [email protected]
To unsubscribe from this group, send email to
[email protected]



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

Reply via email to