test_passing_unions.c

来自「linux下编程用 编译软件」· C语言 代码 · 共 145 行

C
145
字号
/* This tests passing of structs. Only integers are tested.  */#include "defines.h"#include "args.h"struct IntegerRegisters iregs;struct FloatRegisters fregs;unsigned int num_iregs, num_fregs;struct int_struct{  int i;};struct long_struct{  long l;};union un1{  char c;  int i;};union un2{  char c1;  long l;  char c2;};union un3{  struct int_struct is;  struct long_struct ls;  union un1 un;};voidcheck_union_passing1(union un1 u ATTRIBUTE_UNUSED){  check_int_arguments;}voidcheck_union_passing2(union un2 u ATTRIBUTE_UNUSED){  check_int_arguments;}voidcheck_union_passing3(union un3 u ATTRIBUTE_UNUSED){  check_int_arguments;}#define check_union_passing1 WRAP_CALL(check_union_passing1)#define check_union_passing2 WRAP_CALL(check_union_passing2)#define check_union_passing3 WRAP_CALL(check_union_passing3)intmain (void){  union un1 u1;#ifdef CHECK_LARGER_UNION_PASSING  union un2 u2;  union un3 u3;  struct int_struct is;  struct long_struct ls;#endif /* CHECK_LARGER_UNION_PASSING */  /* Check a union with char, int.  */  clear_struct_registers;  u1.i = 0;  /* clear the struct to not have high bits left */  u1.c = 32;  iregs.I0 = 32;  num_iregs = 1;  clear_int_hardware_registers;  check_union_passing1(u1);  u1.i = 0;  /* clear the struct to not have high bits left */  u1.i = 33;  iregs.I0 = 33;  num_iregs = 1;  clear_int_hardware_registers;  check_union_passing1(u1);  /* Check a union with char, long, char.  */#ifdef CHECK_LARGER_UNION_PASSING  clear_struct_registers;  u2.l = 0;  /* clear the struct to not have high bits left */  u2.c1 = 34;  iregs.I0 = 34;  num_iregs = 1;  clear_int_hardware_registers;  check_union_passing2(u2);  u2.l = 0;  /* clear the struct to not have high bits left */  u2.l = 35;  iregs.I0 = 35;  num_iregs = 1;  clear_int_hardware_registers;  check_union_passing2(u2);  u2.l = 0;  /* clear the struct to not have high bits left */  u2.c2 = 36;  iregs.I0 = 36;  num_iregs = 1;  clear_int_hardware_registers;  check_union_passing2(u2);  /* check a union containing two structs and a union.  */  clear_struct_registers;  is.i = 37;  u3.ls.l = 0;  /* clear the struct to not have high bits left */  u3.is = is;  iregs.I0 = 37;  num_iregs = 1;  clear_int_hardware_registers;  check_union_passing3(u3);  ls.l = 38;  u3.ls.l = 0;  /* clear the struct to not have high bits left */  u3.ls = ls;  iregs.I0 = 38;  num_iregs = 1;  clear_int_hardware_registers;  check_union_passing3(u3);  u1.c = 39;  u3.ls.l = 0;  /* clear the struct to not have high bits left */  u3.un = u1;  iregs.I0 = 39;  num_iregs = 1;  clear_int_hardware_registers;  check_union_passing3(u3);  u1.i = 40;  u3.ls.l = 0;  /* clear the struct to not have high bits left */  u3.un = u1;  iregs.I0 = 40;  num_iregs = 1;  clear_int_hardware_registers;  check_union_passing3(u3);#endif /* CHECK_LARGER_UNION_PASSING */  return 0;}

⌨️ 快捷键说明

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