Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C Programming (http://www.velocityreviews.com/forums/f42-c-programming.html)
-   -   x +1 > x (http://www.velocityreviews.com/forums/t537483-x-1-x.html)

 Spiros Bousbouras 09-15-2007 01:41 PM

x +1 > x

In the thread "Eventual undefined behaviour" Harald van Dijk
said:

> The standard allows

> int f(int x) {
> return x + 1 > x;
> }
>
> to be optimised to
>
> int f(int x) {
> return 1;
> }

How does this follow from the standard ? And what would
happen if x was unsigned int ?

 Thomas Lumley 09-15-2007 02:46 PM

Re: x +1 > x

On Sep 15, 6:41 am, Spiros Bousbouras <spi...@gmail.com> wrote:
> In the thread "Eventual undefined behaviour" Harald van Dijk
> said:
>
> > The standard allows
> > int f(int x) {
> > return x + 1 > x;
> > }

>
> > to be optimised to

>
> > int f(int x) {
> > return 1;
> > }

>
> How does this follow from the standard ? And what would
> happen if x was unsigned int ?

If 'x' is not INT_MAX then f() must return 1, and if 'x is INT_MAX the
behaviour is undefined and so f() is permitted to return 1. Then by
the 'as if' rule, the function can compute the return value of 1 in
any way.

With unsigned int the optimization would not be permitted, since the
behaviour on overflow is defined and implies a return value of 0.

-thomas

 Richard Heathfield 09-15-2007 02:54 PM

Re: x +1 > x

Thomas Lumley said:

<snip>

> With unsigned int the optimization would not be permitted, since the
> behaviour on overflow is defined and implies a return value of 0.

Not quite a correct explanation. The C Standard does not define the
behaviour of unsigned ints on overflow. Rather, it specifies unsigned
integer arithmetic in such a way that overflow is impossible.

Your description of the outcome, however, is correct.

--
Richard Heathfield <http://www.cpax.org.uk>
Email: -www. +rjh@