align-test-3.c
来自「Mac OS X 10.4.9 for x86 Source Code gcc」· C语言 代码 · 共 137 行
C
137 行
/* APPLE LOCAL file Macintosh alignment *//* { dg-do run } *//* { dg-options "-Wno-long-long" } *//* * GCC alignment test for alignment problems due to interactions * between FSF and Macintosh alignment modes. * Fred Forsman * Apple Computer, Inc. */#ifdef __LP64__int main(){ return 0;}#else /* 32-bit */ /* Check whether we are testing GCC 3 or later. */#ifdef __GNUC__#if __GNUC__ >= 3#define GCC3 1#else#define GCC3 0#endif#endif#include <stdio.h>#include <stddef.h>#include <string.h>#define Q(x) #x, xtypedef unsigned char UINT8;typedef unsigned long UINT32;static int bad_option = 0;static int flag_verbose = 0;static int nbr_failures = 0;/* === alignment modes === */#pragma options align=power#pragma options align=mac68k#pragma pack(1)typedef struct S0 { UINT32 f1; UINT8 f2;} S0;#pragma options align=reset/* We should be back in mac68k alignment, if #pragma option align=reset can rest a #pragma pack(n). So check for mac68k alignment. */typedef struct S1 { UINT32 f1; UINT8 f2;} S1;#if GCC3#pragma options align=power#pragma options align=mac68k//#pragma pack(push, 1)//#pragma pack(pop)#pragma pack(1)#pragma pack()/* We should be back in mac68k alignment, if #pragma pack() can reset a #pragma pack(n). So check for mac68k alignment. */typedef struct S2 { UINT32 f1; UINT8 f2;} S2;#endif /* GCC3 */static void check(char * rec_name, int actual, int expected_ppc32, int expected_ia32, char * comment){ int expected;#ifdef __i386__ expected = expected_ia32;#else expected = expected_ppc32;#endif if (flag_verbose || (actual != expected)) { printf("%-20s = %2d (%2d) ", rec_name, actual, expected); if (actual != expected) { printf("*** FAIL"); nbr_failures++; } else printf(" PASS"); printf(": %s\n", comment); }}static void check_option(char *option){ if (*option == '-') { if (strcmp(option, "-v") == 0) flag_verbose = 1; else { fprintf(stderr, "*** unrecognized option '%s'.\n", option); bad_option = 1; } } else { fprintf(stderr, "*** unrecognized option '%s'.\n", option); bad_option = 1; }}int main(int argc, char *argv[]){ int i; for (i = 1; i < argc; i++) check_option(argv[i]); if (bad_option) return 1; check(Q(sizeof(S0)), 5, 5, "struct with 1 long, 1 char; pack(1) mode"); check(Q(sizeof(S1)), 6, 6, "struct with 1 long, 1 char; should be mac68k mode");#if GCC3 check(Q(sizeof(S2)), 6, 6, "struct with 1 long, 1 char; should be mac68k mode");#endif if (nbr_failures > 0) return 1; else return 0;}#endif /* 32-bit */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?