跳轉到內容

C 程式設計/stdalign.h

來自華夏公益教科書,開放的書籍,為開放的世界

要查詢和指定物件的對其方式,請包含標頭檔案<stdalign.h> [1].


<stdalign.h>中,定義了四個宏。

alignas
展開為_Alignas
alignof
展開為_Alignof
_alignas_is_defined
展開為整數常量 1。
_alignas_is_defined

展開為整數常量 1. _alignas_is_defined_alignof_is_defined 適用於與 #if 預處理指令一起使用。

alignas() 指定了宣告變數時的位元組對其方式 [2][3].

示例
#include <stdio.h>
#include <stdalign.h>

int main(void)
{
  alignas(65536) int i;
  alignas(256) int j;
  int k;
  printf("Address of i is %p\n", &i);
  printf("Address of j is %p\n", &j);
  printf("Address of k is %p\n", &k);
  return 0;
}
結果
Address of i is 0x7ffffffe0000
Address of j is 0x7ffffffeff00
Address of k is 0x7ffffffeffec

alignof() 返回指定型別在size_t 中所需的對其方式 [2][3].

示例
#include <stdio.h>
#include <stdalign.h>

int main(void)
{
	printf("Alignment requirement for char is %zu.\n", alignof(char));
	printf("Alignment requirement for int is %zu.\n", alignof(int));
	printf("Alignment requirement for float is %zu.\n", alignof(float));
	printf("Alignment requirement for double is %zu.\n", alignof(double));
    return 0;
}
結果
Alignment requirement for char is 1.
Alignment requirement for int is 4.
Alignment requirement for float is 4.
Alignment requirement for double is 8.


alignas 型別說明符 (keyword_Alignas)、alignof 運算子 (keyword_Alignof)、標頭檔案<stdalign.h>,在 ISO/IEC 9899:2011 中新增 [1].


  1. a b C11: WG14/N1570 Committee Draft - April 12, 2011 ISO/IEC 9899:201x (PDF). ISO/IEC. p.268, §7.15 Alignment <stdalign.h>.
  2. a b jtc1/sc22/wg14/www/docs/n1570.pdf C11: WG14/N1570 Committee Draft - April 12, 2011 ISO/IEC 9899:201x (PDF). ISO/IEC. p.48, §6.2.8 Alignment of objects'. {{cite book}}: Check |url= value (help)
  3. a b 22/wg14/www/docs/n1570.pdf C11: WG14/N1570 Committee Draft - April 12, 2011 ISO/IEC 9899:201x (PDF). ISO/IEC. p.127, §6.7.5 Alignment specifier. {{cite book}}: Check |url= value (help)


參考文獻

[編輯 | 編輯原始碼]
華夏公益教科書