Spec-Zone.ru › C

_Alignof (начиная с C11)(устарело в C23), оператор alignof (начиная с C23)

Запрашивает требования к выравниванию типа операнда.

Синтаксис

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

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

(до C23)

Пояснение

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

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

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

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

Примечания

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

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

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 Применяется к Опубликованное поведение Правильное поведение
DR 494 C11 не было указано, вычисляется ли выражение размера VLA в _Alignof оно не вычисляется

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
    • 6.5.3.4 Операторы sizeof и alignof (стр.: уточняется)
  • Стандарт 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)

См. также

max_align_t
(C11)
тип с требованием к выравниванию не меньшим, чем у любого другого скалярного типа
(typedef)
_Alignas(до C23)alignas(начиная с C23) задаёт требования к выравниванию объекта
(спецификатор)
Документация по C++ для оператора alignof

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/language/alignof

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API