Namespaces
Variants

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

From cppreference.net

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

alignof , _Alignof

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

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