_Alignof (since C11) (deprecated in C23) , alignof (since C23) operator
Consulta el requisito de alineación de su tipo de operando.
Contenidos |
Sintaxis
_Alignof(
type-name
)
|
(desde C11) (obsoleto en C23) | ||||||||
alignof(
type-name
)
|
(desde C23) | ||||||||
|
Este operador se utiliza típicamente a través de la macro conveniente alignof , que se proporciona en el encabezado <stdalign.h> |
(hasta C23) |
Explicación
Devuelve el requisito de alineación del tipo nombrado por type-name . Si type-name es un tipo array, el resultado es el requisito de alineación del tipo de elemento del array. El type-name no puede ser tipo función o un tipo incompleto.
El resultado es una constante entera de tipo size_t .
El operando no se evalúa (por lo que los identificadores externos utilizados en el operando no tienen que estar definidos).
Si type-name es un tipo VLA , su expresión de tamaño no se evalúa.
Notas
El uso de
_Alignof
(until C23)
alignof
(since C23)
con expresiones está permitido por algunos compiladores de C como una extensión no estándar.
Palabras clave
Ejemplo
#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;})); }
Salida posible:
Alignment of char = 1
Alignment of max_align_t = 16
alignof(float[10]) = 4
alignof(struct{char c; int n;}) = 4
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| DR 494 | C11 |
si la expresión de tamaño en un VLA se evalúa en
_Alignof
no estaba especificado
|
no se evalúa |
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 6.5.3.4 Los operadores sizeof y alignof (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
-
- 6.5.3.4 Los operadores sizeof y _Alignof (p: 64-65)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 6.5.3.4 Los operadores sizeof y _Alignof (p: 90-91)
Véase también
|
(C11)
|
un tipo con requisito de alineación tan grande como cualquier otro tipo escalar
(typedef) |
| _Alignas (until C23) alignas (since C23) |
establece los requisitos de alineación de un objeto
(specifier) |
|
C++ documentation
para
alignof
operator
|
|