_Alignof (since C11) (deprecated in C23) , alignof (since C23) operator
Interroge l'exigence d'alignement de son type d'opérande.
Table des matières |
Syntaxe
_Alignof(
type-name
)
|
(depuis C11) (obsolète en C23) | ||||||||
alignof(
type-name
)
|
(depuis C23) | ||||||||
|
Cet opérateur est généralement utilisé via la macro pratique alignof , qui est fournie dans l'en-tête <stdalign.h> |
(jusqu'à C23) |
Explication
Retourne l' exigence d'alignement du type nommé par type-name . Si type-name est un type tableau, le résultat est l'exigence d'alignement du type des éléments du tableau. Le type-name ne peut pas être un type fonction ou un type incomplet.
Le résultat est une constante entière de type size_t .
L'opérande n'est pas évaluée (ainsi les identifiants externes utilisés dans l'opérande n'ont pas besoin d'être définis).
Si type-name est un type VLA , son expression de taille n'est pas évaluée.
Notes
L'utilisation de
_Alignof
(jusqu'à C23)
alignof
(depuis C23)
avec des expressions est autorisée par certains compilateurs C en tant qu'extension non standard.
Mots-clés
Exemple
#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;})); }
Sortie possible :
Alignment of char = 1
Alignment of max_align_t = 16
alignof(float[10]) = 4
alignof(struct{char c; int n;}) = 4
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C publiées précédemment.
| DR | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| DR 494 | C11 |
l'évaluation de l'expression de taille dans un VLA avec
_Alignof
n'était pas spécifiée
|
elle n'est pas évaluée |
Références
- Norme C23 (ISO/IEC 9899:2024) :
-
- 6.5.3.4 Les opérateurs sizeof et alignof (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 6.5.3.4 Opérateurs sizeof et _Alignof (p: 64-65)
- Norme C11 (ISO/IEC 9899:2011):
-
- 6.5.3.4 Les opérateurs sizeof et _Alignof (p: 90-91)
Voir aussi
|
(C11)
|
un type dont l'exigence d'alignement est aussi grande que tout autre type scalaire
(typedef) |
| _Alignas (jusqu'en C23) alignas (depuis C23) |
définit les exigences d'alignement d'un objet
(spécificateur) |
|
Documentation C++
pour
alignof
operator
|
|