Namespaces
Variants

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

From cppreference.net

そのオペランド型のアライメント要件を問い合わせます。

目次

構文

_Alignof( type-name ) (C11以降) (C23で非推奨)
alignof( type-name ) (C23以降)

この演算子は通常、ヘッダー <stdalign.h> で提供される便利マクロ alignof を通じて使用されます。

(C23まで)

説明

アライメント要件 を返します。これは 型名 によって指定された型のものです。 type-name が配列型の場合、結果は配列要素型のアライメント要件となります。 type-name は関数型または不完全型であってはなりません。

結果は 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 Applied to Behavior as published Correct behavior
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)

関連項目

他の任意のスカラー型と同じくらい大きなアライメント要件を持つ型
(typedef)
_Alignas (until C23) alignas (since C23) オブジェクトのアライメント要件を設定する
(specifier)
C++ documentation for alignof 演算子