今天在复习STM32的过程中,发现了一个以前遇到过的问题,之前解决过了,现在又忘了,所以在这里整理一下。
在 led.c 和 led.h 中定义完 void led_init(void) 之后,如果在 main 函数中调用 led_init(), 不能加上参数void,否则的话就会出现题目中出现的错误,这个错误的原因是对于变量的声明不能放在可执行语句后面,必须在主函数开头声明变量。换句话来说,如果在 main 函数中以 void led_init(void) 的形式去初始化 led,系统会把它当做 led_init() 函数的声明,这才有了题目中错误的产生。
/*main.c*/
int main(void)
{
void LED_Init(void); //初始化LED
}
main.c(42): error: #268: declaration may not appear after executable statement in block
void LED_Init(void); //初始化LED
/*led.h*/
#ifndef __LED_H
#define __LED_H
void led_init(void);
#endif
同样的,对于 delay_init 函数而言,在 delay.c 中定义时为 void delay_init(u8 SYSCLK),而在 main 函数中初始化时就要以 delay_init(168); 的形式,否则系统也会默认它是一个函数声明,会报错。