Hacker News new | ask | show | jobs
by matzahboy 5131 days ago
I believe that the answers are incorrect. They assume that all true boolean expressions evaluate to 1, whereas the c standard only guarantees that they don't evaluate to 0.

Edit: As pointed out by the responses, I am wrong

4 comments

6.3.1.2 Boolean type

"When any scalar value is converted to _Bool, the result is 0 if the value compares equal to 0; otherwise, the result is 1"

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf page 43

"the c standard only guarantees that they don't evaluate to 0"

Why do people who haven't checked the C standard make such claims? My C lecturer made exactly the same mistake.

No, it guarantees 0 or 1; see C99 6.5.8 paragraph 6: these operators "shall yield 1 if the specified relation is true and 0 if it is false."
Not true, !0 is always 1 in the C standard. Other parts are wrong though (they assume short is narrower than int, and that int is 32 bits).
It's not wrong. If you read the intro, they note that those traits are implementation defined, so they say to assume you're using an implementation with those characteristics.
So this is incorrectly titled. This should be a "A Quiz About Integers in C on common x86 and x64 ABI."

Unfortunately this does not educate people to that kind of issues, which is very unfortunate.

The assumptions are explicitly stated at the beginning of the quiz.
Thanks. I didn't know that