# x +1 > x

Discussion in 'C Programming' started by Spiros Bousbouras, Sep 15, 2007.

1. ### Spiros BousbourasGuest

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 ?

Spiros Bousbouras, Sep 15, 2007

2. ### Thomas LumleyGuest

On Sep 15, 6:41 am, Spiros Bousbouras <> 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

Thomas Lumley, Sep 15, 2007

3. ### Richard HeathfieldGuest

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@