|
test.c
- #include <stdio.h>
- #include <linux/types.h>
- #define UNIT_BITS 32
- struct data {
- __u32 d3;
- __u32 d2;
- __u32 d1;
- __u32 d0;
- };
- static inline void
- data_set_hard (struct data *ret,
- __u32 a, __u32 b, __u32 c, __u32 d)
- {
- ret->d3 = a;
- ret->d2 = b;
- ret->d1 = c;
- ret->d0 = d;
- }
- static inline void
- data_set (struct data *ret, int bit)
- {
- __u32 *data[4];
- int a, b;
- a = bit / UNIT_BITS;
- b = bit % UNIT_BITS;
- data[0] = &ret->d0;
- data[1] = &ret->d1;
- data[2] = &ret->d2;
- data[3] = &ret->d3;
- *data[a] |= 1 << b;
- }
- int
- main (void)
- {
- struct data test = {0};
- int i;
- data_set_hard(&test, 0, 0, 0, 0);
- for (i=0; i<UNIT_BITS*4; i++) {
- data_set(&test, i);
- }
- printf ("test = %.8x, %.8x, %.8x, %.8x\n",
- test.d3, test.d2, test.d1, test.d0);
- return 0;
- }
复制代码
用 gcc -O2 -Wall -o test test.c 编译一下
如果运行结果是 test = ffffffff, ffffffff, ffffffff, ffffffff 则证明你的 gcc 没有问题
如果运行结果是 test = 00000000, 00000000, 00000000, ffffffff 则证明存在 BUG
请测试的朋友们贴出你们的 gcc -v 信息和运行结果 |
|