定义结构体时候初始化引起的问题

编译时候发生错误

bsp/gpio/bsp_gpio.h:18:20: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘attribute’ before ‘=’ token u8 default_dir = 0;

bsp/gpio/bsp_gpio.c:10:38: error: ‘gpio_pin_config_t’ has no member named ‘default_dir’
gpio_pinwrite(base,pin,config->default_dir);

定义结构体时候初始化引起的问题
这是因为,定义结构体只是定义了数据类型,并不会在这个时候分配内存,如果这时候给它初始化,就会报第一个错误。同时,因为定义不正确,直接导致这个default_dir成员不能被识别,进而报第二个错误。

接下来看第二类错误

bsp/gpio/bsp_gpio.h:4:42: error: unknown type name ‘gpio_pin_config_t’
void gpio_init(GPIO_Type *base, int pin, gpio_pin_config_t *config);

不能识别类型名。

定义结构体时候初始化引起的问题
这是因为代码编译的时候会去找函数声明,来到头文件找到你的函数声明,但是声明里面又有编译器还不认识的东西!因为编译器只看到了开头,还没看下面。因此我们在编写头文件的时候,最重要的一条原则是一定要把函数声明放在所有结构体定义的最下面!