_Alignof (since C11) (deprecated in C23) , alignof (since C23) operator
Запрашивает требование выравнивания для типа своего операнда.
Содержание |
Синтаксис
_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 в качестве нестандартного расширения.
Ключевые слова
Пример
#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)
Смотрите также
|
(C11)
|
тип с требованием выравнивания таким же строгим, как у любого другого скалярного типа
(typedef) |
| _Alignas (until C23) alignas (since C23) |
устанавливает требования выравнивания объекта
(specifier) |
|
C++ documentation
для
alignof
operator
|
|