Namespaces
Variants

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

From cppreference.net

Запрашивает требование выравнивания для типа своего операнда.

Содержание

Синтаксис

_Alignof( type-name ) (начиная с C11) (устарело в C23)
alignof( type-name ) (начиная с C23)

Этот оператор обычно используется через удобный макрос alignof , который предоставляется в заголовочном файле <stdalign.h>

(до C23)

Объяснение

Возвращает требование выравнивания типа, именуемого через type-name . Если type-name является типом массива, результатом будет требование выравнивания типа элемента массива. type-name не может быть типом функции или неполным типом.

Результатом является целочисленная константа типа size_t .

Операнд не вычисляется (поэтому внешние идентификаторы, используемые в операнде, не обязаны быть определены).

Если type-name является типом VLA , его выражение размера не вычисляется.

Примечания

Использование _Alignof (до C23) alignof (начиная с C23) с выражениями разрешено некоторыми компиляторами C в качестве нестандартного расширения.

Ключевые слова

alignof , _Alignof

Пример

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

Возможный вывод:

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

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены задним числом к ранее опубликованным стандартам C.

DR Applied to Behavior as published Correct behavior
DR 494 C11 whether the size expression in a VLA is evaluated in _Alignof was unspecified it is unevaluated

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 6.5.3.4 Операторы sizeof и alignof (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 6.5.3.4 Операторы sizeof и _Alignof (стр: 64-65)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 6.5.3.4 Операторы sizeof и _Alignof (стр: 90-91)

Смотрите также

тип с требованием выравнивания таким же строгим, как у любого другого скалярного типа
(typedef)
_Alignas (until C23) alignas (since C23) устанавливает требования выравнивания объекта
(specifier)
C++ documentation для alignof operator