3 ms·
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 ev
by matzahboy 14y 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
- aidenn0 14y agoNot 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).
- matzahboy 14y agoThanks. I didn't know that
- rcfox 14y agoThe assumptions are explicitly stated at the beginning of the quiz.
- chc 14y agoIt'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.
- nooop 14y agoSo 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.
- rcfox 14y ago6.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 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf page 43
- cliffbean 14y agoNo, 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."
- jstanley 14y ago"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.