Namespaces
Variants

_Alignof (since C11) (deprecated in C23) , alignof (since C23) operator

From cppreference.net

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

alignof , _Alignof

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

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