Namespaces
Variants

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

From cppreference.net

Fragt die Ausrichtungsanforderung seines Operandentyps ab.

Inhaltsverzeichnis

Syntax

_Alignof( Typname ) (seit C11) (veraltet in C23)
alignof( Typname ) (seit C23)

Dieser Operator wird typischerweise durch das praktische Makro alignof verwendet, das in der Header-Datei <stdalign.h> bereitgestellt wird.

(bis C23)

Erklärung

Gibt die Ausrichtungsanforderung des durch type-name benannten Typs zurück. Wenn type-name ein Array-Typ ist, ist das Ergebnis die Ausrichtungsanforderung des Array-Elementtyps. Der type-name darf kein Funktionstyp oder ein unvollständiger Typ sein.

Das Ergebnis ist eine ganzzahlige Konstante vom Typ size_t .

Der Operand wird nicht ausgewertet (daher müssen externe Bezeichner, die im Operanden verwendet werden, nicht definiert sein).

Wenn type-name ein VLA -Typ ist, wird seine Größenausdruck nicht ausgewertet.

Hinweise

Die Verwendung von _Alignof (bis C23) alignof (seit C23) mit Ausdrücken ist von einigen C-Compilern als nicht standardkonforme Erweiterung erlaubt.

Schlüsselwörter

alignof , _Alignof

Beispiel

#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;}));
}

Mögliche Ausgabe:

Alignment of char = 1
Alignment of max_align_t = 16
alignof(float[10]) = 4
alignof(struct{char c; int n;}) = 4

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
DR 494 C11 ob der Größenausdruck in einer VLA in _Alignof ausgewertet wird, war nicht spezifiziert er wird nicht ausgewertet

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 6.5.3.4 Die sizeof- und alignof-Operatoren (S: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 6.5.3.4 Die sizeof- und _Alignof-Operatoren (S: 64-65)
  • C11-Standard (ISO/IEC 9899:2011):
  • 6.5.3.4 The sizeof and _Alignof operators (S: 90-91)

Siehe auch

ein Typ mit Ausrichtungsanforderung so groß wie jeder andere skalare Typ
(typedef)
_Alignas (bis C23) alignas (seit C23) legt Ausrichtungsanforderungen eines Objekts fest
(Spezifizierer)
C++-Dokumentation für alignof Operator