_Alignof 运算符

< c‎ | language

查询其运算数类型的对齐要求。

语法

_Alignof( 类型名 ) (C11 起)

通常通过便利宏 alignof 使用此运算符,该宏于头文件 stdalign.h 提供。

解释

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

结果是 size_t 类型整数常量。

不求值运算数(故用作运算数的外部标识符不必有定义)。

类型名VLA 类型,则不求值其大小表达式。

(C2x 起)

注解

一些 C 编译器允许把 _Alignof 用于表达式这种非标准扩展。

关键词

_Alignof

示例

#include <stdio.h>
#include <stddef.h>
#include <stdalign.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

引用

  • C11 standard (ISO/IEC 9899:2011):
  • 6.5.3.4 The sizeof and _Alignof operators (p: 90-91)

参阅

对齐要求不小于任何其他标量类型的类型
(typedef)
_Alignas 说明符 设置对象的对齐要求(C11 起)