Re: Is this a bug?

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

 



David Daney wrote:
> Honggang Xu wrote:
>> Or my understand of keyword "volatile" is wrong, following code outputs
>> compiled by gcc 4.1.1:  x=22 ,y=59
>>  
>> main()
>> {
>> volatile int  x=20,y=35;
>> x=y++ + x++;
>> y= ++y + ++x;
>> printf("x=%d  y=%d\n" ,x,y);
>>  
>> }
>>
> 
> Your program has undefined behavior, the volatile may change the output,
> but it doesn't change the fact that its behavior is undefined.
> 
> The problem is that the affect of the increment operator can take place
> either before or after the affect of the assignment.  The compiler can
> order the affects any way that it desires between sequence points.

Actually, that's not quite true: as this expression exhibits undefined
behaviour, the compiler can return absolutely anything: it isn't limited
to just where it does the increment.

Andrew.

[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