warning: operation on 'zero' may be undefined

Paul Schlie schlie@comcast.net
Fri Oct 1 21:46:00 GMT 2004


Sorry couldn't resist, nothing to do "good fortune" as although:

i = (i = 1) ; may be redundant, it's certainly not ambiguous.

Just as i = (i = i + 1) may be considered similarly, and logically
equivalent to the supposedly ambiguous i = ++i expression.

-paul-

Dave Korn wrote:
> Paul Schlie wrote:
>> Yes, fully agree; and since the expression's value is  insensitive
>> to the order of evaluation of it's sub-expression arguments, it's
>> unambiguous; just as i = ++i is unambiguous, as it's sub expression
>> argument values are not interdependent. The lhs computes the an lvalue,
>> which is independent of it's referenced content rvalue; just as the
>> lvalue of x is independent of the rvalues of a, b, or c, which are in
>> turn have values which are independent of each other's evaluated rvalues.
>
> The two cases are not equivalent.  In both, you have TWO assignments,
> not one; in the case of "i = ++i", it is mere good fortune that they are
> assigning the same value to i, rather than two entirely different values,
> as is the case in "i = (++i) % 3" for any value of i >= 3.



More information about the Gcc mailing list