Queries the alignment requirement of its operand type.
Contents |
_Alignof(type-name) | (since C11)(deprecated in C23) | ||||||||
alignof(type-name) | (since C23) | ||||||||
This operator is typically used through the convenience macroalignof, which is provided in the header<stdalign.h> | (until C23) |
Returns thealignment requirement of the typenamed bytype-name. Iftype-name is an array type, the result is the alignment requirement of the array element type. Thetype-name cannot be function type or an incomplete type.
The result is an integer constant of typesize_t.
The operand is not evaluated (so external identifiers used in the operand do not have to be defined).
Iftype-name is aVLA type, its size expression is not evaluated.
The use of_Alignof(until C23)alignof(since C23) with expressions is allowed by some C compilers as a non-standard extension.
#include <stdalign.h>#include <stddef.h>#include <stdio.h> int main(void){printf("Alignment of char = %zu\n", alignof(char));printf("Alignment of max_align_t = %zu\n", alignof(max_align_t));printf("alignof(float[10]) = %zu\n", alignof(float[10]));printf("alignof(struct{char c; int n;}) = %zu\n", alignof(struct{char c;int n;}));}
Possible output:
Alignment of char = 1Alignment of max_align_t = 16alignof(float[10]) = 4alignof(struct{char c; int n;}) = 4The following behavior-changing defect reports were applied retroactively to previously published C standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| DR 494 | C11 | whether the size expression in a VLA is evaluated in_Alignof was unspecified | it is unevaluated |
(C11) | a type with alignment requirement as great as any other scalar type (typedef)[edit] |
| _Alignas(until C23)alignas(since C23) | sets alignment requirements of an object (specifier) |
C++ documentation for alignof operator | |