_Alignof (C11 起)(C23 中已废弃), alignof (C23 起) 运算符
来自 cppreference.cn
查询其操作数类型的对齐要求。
目录 |
[编辑] 语法
_Alignof( 类型名 ) |
(C11 起)(C23 中已废弃) | ||||||||
alignof( 类型名 ) |
(自 C23 起) | ||||||||
此运算符通常通过便利宏 alignof 使用,该宏在头文件 <stdalign.h> 中提供。 |
(直至 C23) |
[编辑] 解释
返回由 类型名 命名 的类型的对齐要求。如果 类型名 是数组类型,则结果是数组元素类型的对齐要求。类型名 不能是函数类型或不完整类型。
结果是一个 size_t 类型的整数常量。
操作数不被求值(因此操作数中使用的外部标识符不必定义)。
如果 类型名 是 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 | VLA 中的大小表达式是否在 _Alignof 中求值是未指定的 |
它不被求值 |
[编辑] 参考
- C23 标准 (ISO/IEC 9899:2024)
- 6.5.3.4 sizeof 和 alignof 运算符 (p: 待定)
- C17 标准 (ISO/IEC 9899:2018)
- 6.5.3.4 sizeof 和 _Alignof 运算符 (p: 64-65)
- C11 标准 (ISO/IEC 9899:2011)
- 6.5.3.4 sizeof 和 _Alignof 运算符 (p: 90-91)
[编辑] 另请参阅
(C11) |
与任何其他标量类型具有相同对齐要求的类型 (typedef) |
_Alignas(C23 前)alignas(C23 起) | 设置对象的对齐要求 (说明符) |
C++ 文档 关于
alignof 运算符 |