Namensräume
Varianten
Aktionen

_Alignof (seit C11)(veraltet in C23), alignof (seit C23) Operator

Von cppreference.com
< c‎ | Sprache

Fragt die Ausrichtungsvoraussetzung des Typs seines Operanden ab.

Inhalt

[bearbeiten] Syntax

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

Dieser Operator wird typischerweise über das Komfortmakro alignof verwendet, das im Header <stdalign.h> bereitgestellt wird.

(bis C23)

[bearbeiten] Erklärung

Gibt die Ausrichtungsvoraussetzung des durch Typname benannten Typs zurück. Wenn Typname ein Array-Typ ist, ist das Ergebnis die Ausrichtungsvoraussetzung des Array-Element-Typs. Der Typname 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 Typname ein VLA-Typ ist, wird sein Größen-Ausdruck nicht ausgewertet.

[bearbeiten] Hinweise

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

[bearbeiten] Schlüsselwörter

alignof, _Alignof

[bearbeiten] 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

[bearbeiten] Fehlerberichte

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

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
DR 494 C11 ob der Größen-Ausdruck in einem VLA in _Alignof ausgewertet wird, war nicht spezifiziert er wird nicht ausgewertet

[bearbeiten] Referenzen

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

[bearbeiten] Siehe auch

ein Typ mit einer Ausrichtungsanforderung, die so groß ist wie bei jedem anderen Skalartyp
(typedef) [bearbeiten]
_Alignas(bis C23)alignas(seit C23) setzt Ausrichtungsvoraussetzungen eines Objekts
(Spezifizierer)
C++ Dokumentation für alignof Operator