Re: ANSI requirement
[email protected] (Zefram)
| Newsgroups | perl.perl5.porters |
|---|---|
| Message-ID | <[email protected]> |
??var Arnfj??r?? Bjarmason wrote: >I vaguely recall someone mentioning that we rely on some features of C >that aren't strictly guaranteed by ANSI C, Yes, we do. > such as the the offset into >a struct being the sum of the sizeof() of the struct members that came >before in the struct. But not this particular one, which is almost never true across a whole implementation. It would require that no data types have any alignment requirement. Implementations almost always use padding in structs. There is something similar, though: we do rely on the offset of a struct member being *a pure function of* the types of the preceding members. (That is, that where two structs begin with type-identical sequences of members, the layouts of those members will be compatible.) This is almost always true. We rely on a few other things that are almost always true but not guaranteed by the standards. Off the top of my head: * that all data pointers have bitwise-compatible representations * that function pointers are the same size as data pointers * that signed integers are represented in twos-complement * that signed integer arithmetic cleanly wraps on overflow * that the bits of multi-byte integers are divided up into bytes in adjacent groups, with all bits of each byte participating in the integer representation * that bytes consist of exactly eight bits * that all-bits-zero is a valid representation of a null pointer -zefram