命名空间
变体
操作

_Alignof (自 C11 起)(在 C23 中弃用), alignof (自 C23 起) 运算符

来自 cppreference.cn
< c‎ | 语言

查询其操作数类型的对齐要求。

目录

[编辑] 语法

_Alignof( 类型名称 ) (自 C11 起)(在 C23 中弃用)
alignof( 类型名称 ) (自 C23 起)

此运算符通常通过头文件 <stdalign.h> 中提供的便捷宏 alignof 使用

(直到 C23)

[编辑] 说明

返回由 类型名称 命名的类型的对齐要求。如果 类型名称 是数组类型,则结果是数组元素类型的对齐要求。类型名称 不能是函数类型或不完整类型。

结果是 size_t 类型的整数常量。

操作数不被求值(因此操作数中使用的外部标识符不必定义)。

如果 类型名称VLA 类型,则不会计算其大小表达式。

[编辑] 注释

某些 C 编译器允许将带有表达式的 _Alignof(直到 C23)alignof(自 C23 起) 用作非标准扩展。

[编辑] 关键字

alignof, _Alignof

[编辑] 示例

#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 VLA 中大小表达式是否在 _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)

[编辑] 参见

对齐要求与任何其他标量类型一样大的类型
(typedef) [编辑]
_Alignas(直到 C23)alignas(自 C23 起) 设置对象的对齐要求
(说明符)
C++ 文档 for alignof 运算符