Namespaces
Variants

_Alignof (since C11) (deprecated in C23) , alignof (since C23) operator

From cppreference.net

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

目录

语法

_Alignof( type-name ) (自 C11 起) (C23 中弃用)
alignof( type-name ) (自 C23 起)

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

(C23 前)

说明

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

结果是一个类型为 size_t 的整型常量。

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

如果 type-name 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 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)

参见

对齐要求与任何其他标量类型同样严格的数据类型
(typedef)
_Alignas (until C23) alignas (since C23) 设置对象的对齐要求
(specifier)
C++ documentation for alignof operator