名稱空間
變體
操作

_Alignof (C11 起)(C23 中已廢棄), alignof (C23 起) 運算子

來自 cppreference.com
< c‎ | 語言

查詢其運算元型別的對齊要求。

目錄

[編輯] 語法

_Alignof( 型別名 ) (C11 起)(C23 中已廢棄)
alignof( 型別名 ) (自 C23 起)

此運算子通常透過便利宏 alignof 使用,該宏在標頭檔案 <stdalign.h> 中提供。

(直至 C23)

[編輯] 解釋

返回由 型別名 命名 的型別的對齊要求。如果 型別名 是陣列型別,則結果是陣列元素型別的對齊要求。型別名 不能是函式型別或不完整型別。

結果是一個 size_t 型別的整數常量。

運算元不被求值(因此運算元中使用的外部識別符號不必定義)。

如果 型別名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 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(C23 前)alignas(C23 起) 設定物件的對齊要求
(說明符)
C++ 文件 關於 alignof 運算子