aggregates.c

来自「xml大全 可读写调用率很高 xml大全 可读写调用率很高」· C语言 代码 · 共 126 行

C
126
字号
// { dg-do run { target i?86-*-linux* i?86-*-freebsd* } }// { dg-options "-malign-double" }// Origin: Alex Samuel <samuel@codesourcery.com>/* Test the data layout of C aggregates by checking aggregate size and   alignment and field offsets 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> ())/* Computes the offset of FIELD in AGGREGATE.  */#define offsetof(aggregate, field) \  ((unsigned) (& ((aggregate*) 0)->field))/* Structs S1, S2, S3, S4, and union U5 are taken from Intel, "IA-64   Software Conventions and Runtime Architecture Guide", version of   August 1999.  */struct S1{  char c;};struct S2{  char c;  char d;  short s;  int n;};struct S3{  char c;  short s;};struct S4{  char c;  double d;  short s;};union U5{  char c;  short s;  int j;};intmain (){  if (sizeof (struct S1) 		!=  1)    return 1;  if (alignof (struct S1)		!=  1)    return 2;  if (offsetof (struct S1, c)		!=  0)    return 3;    if (sizeof (struct S2)		!=  8)    return 4;  if (alignof (struct S2)       	!=  4)    return 5;  if (offsetof (struct S2, c)		!=  0)    return 6;  if (offsetof (struct S2, d)		!=  1)    return 7;  if (offsetof (struct S2, s)		!=  2)    return 8;  if (offsetof (struct S2, n)		!=  4)    return 9;    if (sizeof (struct S3)		!=  4)    return 10;  if (alignof (struct S3)		!=  2)    return 11;  if (offsetof (struct S3, c)		!=  0)    return 12;  if (offsetof (struct S3, s)		!=  2)    return 13;    if (sizeof (struct S4)		!= 24)    return 14;  if (alignof (struct S4)		!=  8)    return 15;  if (offsetof (struct S4, c)		!=  0)    return 16;  if (offsetof (struct S4, d)		!=  8)    return 17;  if (offsetof (struct S4, s)		!= 16)    return 18;    if (sizeof (union U5)			!=  4)    return 19;  if (alignof (union U5)		!=  4)    return 20;  if (offsetof (union U5, c)		!=  0)    return 21;  if (offsetof (union U5, s)		!=  0)    return 22;  if (offsetof (union U5, j)		!=  0)    return 23;    return 0;}

⌨️ 快捷键说明

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