Hendrik Boom wrote on 12.06.19 14:40: > On Wed, Jun 12, 2019 at 01:47:42PM +0200, Irrwahn wrote: > >> >> There is nothing wrong here. Gcc reports the size that is necessary to >> store an object of type sesqui_int, including any padding that has been >> applied, e.g. for alignment reasons. An array of n elements of that type >> will in turn always be reported by sizeof as having *exactly* n times >> that size, in bytes. Gcc is therefore in accordance with the language >> definition. > > More precisely, sizeof(foo) is the spacing of consecutive elements of type > foo. > > -- hendrik
Thank you Hendrik, that is indeed very aptly phrased! Just for the sake of completeness, the actual language definition takes the usual wordy but precise approach in Standardese: ISO/IEC 9899:2011 | 6.5.3.4 The sizeof and _Alignof operators | [...] | 2 The sizeof operator yields the size (in bytes) of its operand, | which may be an expression or the parenthesized name of a type. | The size is determined from the type of the operand. The result | is an integer. If the type of the operand is a variable length | array type, the operand is evaluated; otherwise, the operand is | not evaluated and the result is an integer constant. | [...] | 4 When sizeof is applied to an operand that has type char, unsigned | char, or signed char, (or a qualified version thereof) the result | is 1. When applied to an operand that has array type, the result is | the total number of bytes in the array. When applied to an operand | that has structure or union type, the result is the total number of | bytes in such an object, including internal and trailing padding. Best regards Urban -- Sapere aude!
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Dng mailing list Dng@lists.dyne.org https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng