Re: infinite for-loop and related question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 16 February 2011 20:09, Jason Mancini wrote:
>
> Hello,
> So as I recall, the following can be an infinite loop now with optimizations, right?
>
>   for (int i(1); i!=0; ++i) { ... }

Right.

> What about:
>
>   unsigned int x = 0xFFFFFFFFU;
>   x = x+1;
>   if (x) { ... can we get here because "positive x + 1 must still positive"? ... }
>
> If not, given the first, why not?

No.  The C and C++ standards define that unsigned integers do not
overflow, they wrap, with well-defined behaviour.

They do not define what happens if a signed integer overflows, so your
first loop results in undefined behaviour, and so you cannot
reasonably expect any particular behaviour. The compiler can do
whatever it likes with your code.

Put another way:
There is no way for a correct C or C++ program to increment a signed
integer greater than zero such that the result is zero. Because a
correct C or C++ program does not contain integer overflows.



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux