_Alignof (C11 起)(C23 中已廢棄), alignof (C23 起) 運算子
來自 cppreference.com
查詢其運算元型別的對齊要求。
目錄 |
[編輯] 語法
_Alignof( 型別名 ) |
(C11 起)(C23 中已廢棄) | ||||||||
alignof( 型別名 ) |
(自 C23 起) | ||||||||
此運算子通常透過便利宏 alignof 使用,該宏在標頭檔案 <stdalign.h> 中提供。 |
(直至 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 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)
[編輯] 另請參閱
(C11) |
與任何其他標量型別具有相同對齊要求的型別 (typedef) |
_Alignas(C23 前)alignas(C23 起) | 設定物件的對齊要求 (說明符) |
C++ 文件 關於
alignof 運算子 |