Obscure C code (was Re: Excessive optimization)
Brent Hilpert
hilpert at cs.ubc.ca
Tue Dec 7 16:08:38 CST 2010
On 2010 Dec 7, at 2:33 AM, Christian Corti wrote:
> On Mon, 6 Dec 2010, Brent Hilpert wrote:
>>>> It was thus said that the Great Philip Pemberton once stated:
>>> [...]
>>>> > However: the compiler would still be correct to use the value 123
>>>> > instead of 1, thus that code may not work... So it's compiler
>>> !!-1 = !(!-1) = !(0) = 123
>>> !!123 = !(!123) = !(0) = 123
>>> !!0 = !(!0) = !(123) = 0
>>> Whether that's correct behaviour or not was not the question.
>>
>> Lame. It was the question.
>
> No, it was stated by Sean Conner that if a (admittedly broken)
> compiler used a value of 123 for !0, you could circumvent this
> behaviour with a double negation, i.e. !!(!0) would produce a 1.
>
> That's what he said:
>> Nope. !b will turn 0 to 1, and anything not 0 to 0.
>>
>> !!-1 = !(!-1) = !(0) = 1
>> !!123 = !(!123) = !(0) = 1
>> !!0 = !(!0) = !(1) = 0
>
> which is clearly not the case if you assume a broken compiler that
> doesn't evaluate !(0) to 1. I think I have seen such a compiler (maybe
> a
> cheap PD compiler on the Amiga, but I'm not sure), so it may well be
> compiler dependent (although not correct and I've never questioned
> that).
>
> Is it possible that we are talking past each other?
In the same sense that anything is possible if a compiler can do
anything it wants regardless of the language definition, I guess it is.
Agreed that double negation is not a fix to the error of said broken
compiler, but I wasn't sure that was Sean's point in suggesting double
negation.
You nonetheless agreed with Phil's assertion that it was
compiler-dependant behaviour.
More information about the cctalk
mailing list