_Alignof (seit C11)(veraltet in C23), alignof (seit C23) Operator
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
[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
| (C11) |
ein Typ mit einer Ausrichtungsanforderung, die so groß ist wie bei jedem anderen Skalartyp (typedef) |
| _Alignas(bis C23)alignas(seit C23) | setzt Ausrichtungsvoraussetzungen eines Objekts (Spezifizierer) |
| C++ Dokumentation für
alignof Operator | |