|
本帖最后由 飞宇 于 2016-8-4 23:44 编辑
先看一段代码 (NRF51822开发板配套程序[基础实验9-看门狗实验]中的看门狗初始化的一段代码)。
- //定义一个看门狗的配置结构体,并用默认的参数初始化结构体
- nrf_drv_wdt_config_t config = NRF_DRV_WDT_DEAFULT_CONFIG;
- #define NRF_DRV_WDT_DEAFULT_CONFIG \
- { \
- .behaviour = WDT_CONFIG_BEHAVIOUR, \
- .reload_value = WDT_CONFIG_RELOAD_VALUE, \
- .interrupt_priority = WDT_CONFIG_IRQ_PRIORITY, \
- }
复制代码 其中nrf_drv_wdt_config_t是我们声明的一个结构体,用于配置看门狗时使用。- typedef struct
- {
- nrf_wdt_behaviour_t behaviour; /*当CPU处于sleep/halt模式时看门狗的动作 */
- uint32_t reload_value; /*看门狗重载数值,单位:ms */
- uint8_t interrupt_priority; /* 看门狗中断优先级 */
- } nrf_drv_wdt_config_t;
复制代码
为了看得更清楚,我们去掉代码中的宏定义,将代码整理如下:
- nrf_drv_wdt_config_t config =
- {
- .behaviour = WDT_CONFIG_BEHAVIOUR,
- .reload_value = WDT_CONFIG_RELOAD_VALUE,
- .interrupt_priority = WDT_CONFIG_IRQ_PRIORITY,
- }
复制代码 在这段代码中,我们可以看到,这种结构体的初始化方式和我们平常用的很不一样。这就是C99标准中的一种新的结构体的初始化方式,被称为:结构体的指定初始化。使用这种方式来初始化结构体的好处就在于:不需要严格按照结构体定义中的成员变量的顺序来进行初始化。看下面的一个例子,对比一下两种接种结构体的初始化方式,很明显,指定初始化会灵活很多,因为我们初始化时不需要再去关心成员变量的顺序了。
- //声明一个结构体,用于记录学生考试成绩
- struct student_st
- {
- char c;
- int score;
- const char *name;
- };
- //结构体初始化,必须严格按照成员变量的顺序来初始化
- struct student A = {'A', 91, "Alan"};
- //指定初始化,可以按照任意顺序来初始化
- struct student A =
- {
- .name = "LIFENG",
- .c = 'B',
- .score = 96,
- };
复制代码 最后,不要忘记在MDK开发环境中勾选“C99 Mode”,如下图所示,否则,编译程序时会报错。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|