20040629-1.c
来自「用于进行gcc测试」· C语言 代码 · 共 140 行
C
140 行
/* Test arithmetics on bitfields. */#ifndef Textern void abort (void);extern void exit (int);#ifndef FIELDS1#define FIELDS1#endif#ifndef FIELDS2#define FIELDS2#endifstruct { FIELDS1 unsigned int i : 6, j : 11, k : 15; FIELDS2 } b;struct { FIELDS1 unsigned int i : 5, j : 1, k : 26; FIELDS2 } c;struct { FIELDS1 unsigned int i : 16, j : 8, k : 8; FIELDS2 } d;unsigned int ret1 (void) { return b.i; }unsigned int ret2 (void) { return b.j; }unsigned int ret3 (void) { return b.k; }unsigned int ret4 (void) { return c.i; }unsigned int ret5 (void) { return c.j; }unsigned int ret6 (void) { return c.k; }unsigned int ret7 (void) { return d.i; }unsigned int ret8 (void) { return d.j; }unsigned int ret9 (void) { return d.k; }#define T(n, pre, post, op) \void fn1_##n (unsigned int x) { pre b.i post; } \void fn2_##n (unsigned int x) { pre b.j post; } \void fn3_##n (unsigned int x) { pre b.k post; } \void fn4_##n (unsigned int x) { pre c.i post; } \void fn5_##n (unsigned int x) { pre c.j post; } \void fn6_##n (unsigned int x) { pre c.k post; } \void fn7_##n (unsigned int x) { pre d.i post; } \void fn8_##n (unsigned int x) { pre d.j post; } \void fn9_##n (unsigned int x) { pre d.k post; }#include "20040629-1.c"#undef T#define FAIL(n, i) abort ()intmain (void){#define T(n, pre, post, op) \ b.i = 51; \ b.j = 636; \ b.k = 31278; \ c.i = 21; \ c.j = 1; \ c.k = 33554432; \ d.i = 26812; \ d.j = 156; \ d.k = 187; \ fn1_##n (3); \ if (ret1 () != (op (51, 3) & ((1 << 6) - 1))) \ FAIL (n, 1); \ b.i = 51; \ fn2_##n (251); \ if (ret2 () != (op (636, 251) & ((1 << 11) - 1))) \ FAIL (n, 2); \ b.j = 636; \ fn3_##n (13279); \ if (ret3 () != (op (31278, 13279) & ((1 << 15) - 1))) \ FAIL (n, 3); \ b.j = 31278; \ fn4_##n (24); \ if (ret4 () != (op (21, 24) & ((1 << 5) - 1))) \ FAIL (n, 4); \ c.i = 21; \ fn5_##n (1); \ if (ret5 () != (op (1, 1) & ((1 << 1) - 1))) \ FAIL (n, 5); \ c.j = 1; \ fn6_##n (264151); \ if (ret6 () != (op (33554432, 264151) & ((1 << 26) - 1))) \ FAIL (n, 6); \ c.k = 33554432; \ fn7_##n (713); \ if (ret7 () != (op (26812, 713) & ((1 << 16) - 1))) \ FAIL (n, 7); \ d.i = 26812; \ fn8_##n (17); \ if (ret8 () != (op (156, 17) & ((1 << 8) - 1))) \ FAIL (n, 8); \ d.j = 156; \ fn9_##n (199); \ if (ret9 () != (op (187, 199) & ((1 << 8) - 1))) \ FAIL (n, 9); \ d.k = 187;#include "20040629-1.c"#undef T return 0;}#else#ifndef opadd#define opadd(x, y) (x + y)#define opsub(x, y) (x - y)#define opinc(x, y) (x + 1)#define opdec(x, y) (x - 1)#define opand(x, y) (x & y)#define opior(x, y) (x | y)#define opxor(x, y) (x ^ y)#define opdiv(x, y) (x / y)#define oprem(x, y) (x % y)#define opadd3(x, y) (x + 3)#define opsub7(x, y) (x - 7)#define opand21(x, y) (x & 21)#define opior19(x, y) (x | 19)#define opxor37(x, y) (x ^ 37)#define opdiv17(x, y) (x / 17)#define oprem19(x, y) (x % 19)#endifT(1, , += x, opadd)T(2, ++, , opinc)T(3, , ++, opinc)T(4, , -= x, opsub)T(5, --, , opdec)T(6, , --, opdec)T(7, , &= x, opand)T(8, , |= x, opior)T(9, , ^= x, opxor)T(a, , /= x, opdiv)T(b, , %= x, oprem)T(c, , += 3, opadd3)T(d, , -= 7, opsub7)T(e, , &= 21, opand21)T(f, , |= 19, opior19)T(g, , ^= 37, opxor37)T(h, , /= 17, opdiv17)T(i, , %= 19, oprem19)#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?