gcc not warning on all occurences of operations with undefine d results?

Daniel Kabs daniel.kabs@gmx.de
Wed Nov 16 11:08:00 GMT 2005


On Wednesday 16 November 2005 00:26, Ryan Mansfield wrote:
>>> ... if I have an
>>> expression and somewhere in that expression, I use an increment
>>> (decrement) operator on a variable, I can not mention that variable
>>> elsewhere in the expression. 
>> I think, that this is wrong. The exact rule should be more like "...if
>> the result of the operation is not defined by standard..."
> The exact rule is in section Paragraph 2

I just wanted to give a "rule of thumb". To help fellow programmers to avoid 
that trap.

Granted, my "rule of thumb" is not 100% correct but if you adhere to it, you 
avoid most of the problematic uses of ++ and --. And it's easy to 
remember. :-)

I think, a lot easier than what I found here:

| Between the previous and next sequence point an object shall have its stored
| value modified at most once by the evaluation of an expression. 

| Furthermore, the prior value shall be read only to determine the value to be
| stored. 

| Except as specified later, the order of evaluation of subexpressions and the
| order in which side effects take place are both unspecified. 

What about rephrasing the "rule" as:
"If I have an assignment and somewhere in that assignment, I use an increment
(decrement) operator on a variable, I should not mention that variable 
elsewhere in the assignment".


More information about the Gcc-help mailing list