📄 aggregates.c
字号:
// Skip if not target: i?86-*-linux* i?86-*-freebsd*// Special g++ 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -