This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: gcc not warning on all occurences of operations with undefine d results?
- From: Daniel Kabs <daniel dot kabs at gmx dot de>
- To: Ryan Mansfield <RMansfield at qnx dot com>
- Cc: 'Ladislav Mecir' <lmecir at mbox dot vol dot cz>,gcc-help at gcc dot gnu dot org
- Date: Wed, 16 Nov 2005 12:07:36 +0100
- Subject: Re: gcc not warning on all occurences of operations with undefine d results?
- References: <3518719F06577C4F85DA618E3C37AB9101389220@nimbus.ott.qnx.com>
Hello!
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 5.1.2.3 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:
http://c0x.coding-guidelines.com/6.5.html
| 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".
Cheers
Daniel