Оператор _Alignof (с C11)
Определяет требования к выравниванию для своего операнда.
Синтаксис
_Alignof( имя-типа ) | (с C11) | |
alignof( имя-типа ) | (с C23) |
| Обычно этот оператор используется через удобную макрокоманду | (до C23) |
Объяснение
Возвращает требования к выравниванию типа, указанного именем имя-типа. Если имя-типа — это массивный тип, результатом будет требование к выравниванию типа элемента массива. имя-типа не может быть типом функции или неполным типом.
Результат — целая константа типа size_t.
Операнд не вычисляется (следовательно, внешние идентификаторы, используемые в операнде, не обязательно должны быть определены).
Если имя-типа — это тип ВЛА, выражение его размера не вычисляется.
Примечания
Использование _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 | Применено к | Поведение как опубликовано | Правильное поведение |
|---|---|---|---|
| DR 494 | C11 | не было указано, вычисляется ли выражение размера в ВЛА в _Alignof | оно не вычисляется |
Ссылки
- Стандарт C23 (ISO/IEC 9899:2023):
- 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 спецификатор(C11) | устанавливает требования к выравниванию объекта |
Документация C++ для alignof operator |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/language/alignof