align.c

来自「gcc-you can use this code to learn somet」· C语言 代码 · 共 125 行

C
125
字号
// Skip if not target: i?86-*-linux* i?86-*-freebsd*// Special g++ Options: -malign-double// Origin: Alex Samuel <samuel@codesourcery.com>/* Test the size and alignment of fundamental C types for compliance   with the IA-64 ABI.  */template<typename T>inline unsignedalignmentof (){  struct S  {    char start_;    T object_;  };  return (unsigned) & ((S *) 0)->object_;}/* Computes the alignment, in bytes, of TYPE.  */#define alignof(type) (alignmentof<type> ())enum A { a };intmain (){  if (sizeof  (char)                    !=  1)    return 1;  if (alignof (char)                    !=  1)    return 2;  if (sizeof  (signed char)             !=  1)    return 3;  if (alignof (signed char)             !=  1)    return 4;  if (sizeof  (unsigned char)           !=  1)    return 5;    if (alignof (unsigned char)           !=  1)    return 6;  if (sizeof  (short)                   !=  2)    return 7;  if (alignof (short)                   !=  2)    return 8;  if (sizeof  (signed short)            !=  2)    return 9;  if (alignof (signed short)            !=  2)    return 10;  if (sizeof  (unsigned short)          !=  2)    return 11;  if (alignof (unsigned short)          !=  2)    return 12;  if (sizeof  (int)                     !=  4)    return 13;  if (alignof (int)                     !=  4)    return 14;  if (sizeof  (signed int)              !=  4)    return 15;  if (alignof (signed int)              !=  4)    return 16;  if (sizeof  (unsigned int)            !=  4)    return 17;  if (alignof (unsigned int)            !=  4)    return 18;  if (sizeof  (enum A)                  !=  4)    return 19;  if (alignof (enum A)                  !=  4)    return 20;#ifdef HAVE_IA64_TYPES  if (sizeof  (__int64)                 !=  8)    return 21;  if (alignof (__int64)                 !=  8)    return 22;  if (sizeof  (signed __int64)          !=  8)    return 23;  if (alignof (signed ___int64)         !=  8)    return 24;  if (sizeof  (unsigned __int64)        !=  8)    return 25;  if (alignof (unsigned __int64)        !=  8)    return 26;  if (sizeof  (__int128)                != 16)    return 27;  if (alignof (__int128)                != 16)    return 28;  if (sizeof  (signed __int128)         != 16)    return 29;  if (alignof (signed ___int128)        != 16)    return 30;  if (sizeof  (unsigned __int128)       != 16)    return 31;  if (alignof (unsigned ___int128)      != 16)    return 32;#endif  /* HAVE_IA64_TYPES  */  if (sizeof  (void *)                  !=  4)    return 33;  if (alignof (void *)                  !=  4)    return 34;  if (sizeof  (void (*) ())             !=  4)    return 35;  if (alignof (void (*) ())             !=  4)    return 36;  if (sizeof  (float)                   !=  4)    return 37;  if (alignof (float)                   !=  4)    return 38;  if (sizeof  (double)                  !=  8)    return 39;  if (alignof (double)                  !=  8)    return 40;#ifdef HAVE_IA64_TYPES  if (sizeof  (__float80)               != 16)    return 41;  if (alignof (__float80)               != 16)    return 42;  if (sizeof  (__float128)              != 16)    return 43;  if (alignof (__float128)              != 16)    return 44;#endif  /* HAVE_IA64_TYPES  */  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?