On 30 Dec 2006 03:20:11 +0100, Gabriel Dos Reis <[EMAIL PROTECTED]> wrote: ...
The C standard, in effect, has an appendix (Annex H) that was not there in the C89 edition, and that talks about the very specific issue at handH.2.2 Integer types [#1] The signed C integer types int, long int, long long int, and the corresponding unsigned types are compatible with LIA-1. If an implementation adds support for the LIA-1 exceptional values ``integer_overflow'' and ``undefined'', then those types are LIA-1 conformant types. C's unsigned integer types are ``modulo'' in the LIA-1 sense in that overflows or out-of-bounds results silently wrap. An implementation that defines signed integer types as also being modulo need not detect integer overflow, in which case, only integer divide-by-zero need be detected.
which clearly says LIA-1 isn't a requirement - notice "if" in the second setence. H.1 makes it clear that the entire Annex H doesn't add any extra rule to the language but merely describes what C is in regard to LIA-1. H.2 doubly makes it clear that C as it defined isn't LIA-1 - again, notice "if" in H.2p1. The second sentence of H.3p1 confirms this again: C's operations are compatible with LIA−1 in that C allows an implementation to cause a notification to occur when any arithmetic operation returns an exceptional value as defined in LIA−1 clause 5. i.e. "compatible" means C's definition doesn't prevent a LIA-1 conformant implementation. In other words, all LIA-1 comformant compiler is conformant to C99 in terms of arithmetic and types. However, not all C99 conformant compiler aren't LIA-1 conformant. C isn't conformant to LIA-1 but merely compatible, exactly because of the undefined aspect. That's enough playing a language laywer for me in a day. -- #pragma ident "Seongbae Park, compiler, http://seongbae.blogspot.com"
