6.5.3.4 The sizeof and alignof operators
Constraints
1. The sizeof operator shall not be applied to an expression that has function type or an
incomplete type, to the parenthesized name of such a type, or to an expression that
designates a bit-field member. The alignof operator shall not be applied to a function
type or an incomplete type.
Semantics
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.
3. The alignof operator yields the alignment requirement of its operand type. The result
is an integer constant. When applied to an array type, the result is the alignment
requirement of the element type.
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.102) 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.