Queries the alignment requirement of its operand type.
[edit] Syntax_Alignof(
type-name )
(since C11)(deprecated in C23) alignof(
type-name )
(since C23)
This operator is typically used through the convenience macro alignof, which is provided in the header <stdalign.h>
(until C23) [edit] ExplanationReturns the alignment requirement of the type named by type-name. If type-name is an array type, the result is the alignment requirement of the array element type. The type-name cannot be function type or an incomplete type.
The result is an integer constant of type size_t.
The operand is not evaluated (so external identifiers used in the operand do not have to be defined).
If type-name is a VLA type, its size expression is not evaluated.
[edit] NotesThe 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 = 1 Alignment of max_align_t = 16 alignof(float[10]) = 4 alignof(struct{char c; int n;}) = 4[edit] Defect reports
The 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 [edit] References
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4