_Alignof 运算符 (C11 起)
来自cppreference.com
查询其运算数类型的对齐要求。
语法
_Alignof( 类型名 )
|
(C11 起)(C23 中弃用) | ||||||||
alignof( 类型名 )
|
(C23 起) | ||||||||
通常通过便利宏 alignof 使用此运算符,该宏于头文件 |
(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 | 未指明是否求值 _Alignof 中的 VLA 中的大小表达式
|
不求值它 |
引用
- C23 标准(ISO/IEC 9899:2024):
- 6.5.3.4 The sizeof and alignof operators (第 TBD 页)
- C17 标准(ISO/IEC 9899:2018):
- 6.5.3.4 The sizeof and _Alignof operators (第 64-65 页)
- C11 标准(ISO/IEC 9899:2011):
- 6.5.3.4 The sizeof and _Alignof operators (第 90-91 页)
参阅
(C11) |
对齐要求不小于任何其他标量类型的类型 (typedef) |
_Alignas 说明符(C11)
|
设置对象的对齐要求 |