1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| /** 结果: struct test 250 0 180 3 111 name: FOO_IIC type: 1 enable: 0 222 name: FOO_GPIO type: 0 enable: 1 333 name: FOO_SPI type: 2 enable: 1 */ #include <stdio.h> #include <inttypes.h> /////////////////////// // 简单int类型的数组 // 数组赋值另一种方式,但只在gcc下编译通过,g++不能 enum { AAA = 0, BBB, CCC, DDD, }; // 只对感兴趣的索引值进行赋值,而不管下标的顺序 static const int regs[] = { [DDD] = 250, [CCC] = 3, [AAA] = 180, }; void struct_test1() { printf("%d %d %d %d\n", regs[DDD], regs[BBB], regs[AAA], regs[CCC]); } /////////////////////// // 结构体数组初始化示例 enum control_type { TYPE_GPIO = 0, TYPE_IIC = 1, TYPE_SPI = 2, }; typedef struct control_info_t { const char *name; enum control_type type; int enable; }control_info; void struct_test_2() { // c++风格,用g++并使用 -std=c++11 //control_info gcontrol_info0 {.name = "FOO", .type = TYPE_SPI, .enable=1}; // 三个依次赋值 control_info control_info1[3] = { {"FOO_GPIO", TYPE_GPIO, 1}, {"FOO_IIC", TYPE_IIC, 0}, {"FOO_SPI", TYPE_SPI, 1}, }; printf("111 name: %s type: %d enable: %d\n", control_info1[TYPE_IIC].name, control_info1[TYPE_IIC].type, control_info1[TYPE_IIC].enable); // GNU风格赋值 control_info control_info2[3] = { [TYPE_SPI] = {"FOO_SPI", TYPE_SPI, 1}, [TYPE_GPIO] = {"FOO_GPIO", TYPE_GPIO, 1}, }; printf("222 name: %s type: %d enable: %d\n", control_info2[TYPE_GPIO].name, control_info2[TYPE_GPIO].type, control_info2[TYPE_GPIO].enable); // 只有一个赋值 control_info control_info[3]; control_info[TYPE_SPI].name = "FOO_SPI"; control_info[TYPE_SPI].type = TYPE_SPI; control_info[TYPE_SPI].enable = 1; printf("333 name: %s type: %d enable: %d\n", control_info[TYPE_SPI].name, control_info[TYPE_SPI].type, control_info[TYPE_SPI].enable); } int main(void) { printf("struct test\n"); struct_test1(); struct_test_2(); return 0; }
|