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 + -
显示快捷键?