_Alignof (C11以降)(C23で非推奨)、alignof (C23以降) 演算子
From cppreference.com
オペランド型の配置要件を問い合わせます。
目次 |
[編集] 構文
_Alignof( 型名 ) |
(C11以降)(C23で非推奨) | ||||||||
alignof( 型名 ) |
(C23以降) | ||||||||
|
この演算子は、通常、ヘッダー <stdalign.h> で提供される便利なマクロ 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 | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| DR 494 | C11 | _AlignofにおけるVLAのサイズ式の評価の有無は未規定でした |
評価されません |
[編集] 参考文献
- C23標準 (ISO/IEC 9899:2024)
- 6.5.3.4 sizeofおよびalignof演算子 (p: TBD)
- 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)
[編集] 関連項目
| (C11) |
他のどのスカラ型よりも大きいアライメント要求を持つ型 (typedef) |
| _Alignas(C23まで)alignas(C23以降) | オブジェクトの配置要件を設定します (指定子) |
| C++ドキュメント
alignof 演算子 | |