_Alignof (since C11) (deprecated in C23) , alignof (since C23) operator
查询其操作数类型的对齐要求。
目录 |
语法
_Alignof(
type-name
)
|
(自 C11 起) (C23 中弃用) | ||||||||
alignof(
type-name
)
|
(自 C23 起) | ||||||||
|
此运算符通常通过便捷宏 alignof 使用,该宏在头文件 <stdalign.h> 中提供 |
(C23 前) |
说明
返回由 类型名 指定的类型的 对齐要求 。如果 类型名 是数组类型,则结果为数组元素类型的对齐要求。 类型名 不能是函数类型或不完整类型。
结果是一个类型为 size_t 的整型常量。
操作数不会被求值(因此操作数中使用的外部标识符不必定义)。
如果 type-name 是 VLA 类型,其大小表达式不会被求值。
注释
某些C编译器作为非标准扩展允许在表达式中使用
_Alignof
(C23前)
alignof
(C23起)
。
关键词
示例
#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 494 | C11 |
未明确说明
_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)
参见
|
(C11)
|
对齐要求与任何其他标量类型同样严格的数据类型
(typedef) |
| _Alignas (until C23) alignas (since C23) |
设置对象的对齐要求
(specifier) |
|
C++ documentation
for
alignof
operator
|
|