bitreverse-18.c
来自「Mac OS X 10.4.9 for x86 Source Code gcc」· C语言 代码 · 共 78 行
C
78 行
/* APPLE LOCAL file 4430139 */#include <string.h>extern void abort();/* { dg-do run { target powerpc*-*-darwin* } } *//* { dg-options "-std=gnu99" } */typedef unsigned short WORD;typedef unsigned int DWORD;#pragma reverse_bitfields on#pragma ms_struct on#define USE_STRUCT_WRAPPER 0#pragma pack(push, 2)typedef struct{ DWORD a;#if USE_STRUCT_WRAPPER struct {#endif WORD b:2, c:14;#if USE_STRUCT_WRAPPER };#endif DWORD d:22, e:10; DWORD f; DWORD g:25, h:1, i:6;#if USE_STRUCT_WRAPPER struct {#endif WORD j:14, k:2;#if USE_STRUCT_WRAPPER };#endif} Foo;typedef union { Foo x; int y[6]; } u1;#pragma pack(pop)int main(int argc, char* argv[]){ Foo foo; int i; u1 U; memset (&U, 0, sizeof(u1)); U.x.a = 1; U.x.b = 1; U.x.c = 1; U.x.d = 1; U.x.e = 1; U.x.f = 1; U.x.g = 1; U.x.h = 1; U.x.i = 1; U.x.j = 1; U.x.k = 1; // s should be == 20. In the bad case, it ends up as 22 int s = sizeof(Foo); if (sizeof(Foo) != 20 || U.y[0] != 0x00000001 || U.y[1] != 0x00050040 || U.y[2] != 0x00010000 || U.y[3] != 0x00010600 || U.y[4] != 0x00014001 || U.y[5] != 0x00000000) abort(); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?