问题
问题描述
在 Keil5 中使用 extern 声明变量时,遇到了变量已经被初始化的编译错误
解决方案
extern后只能声明不能初始化!!!
在my_usart.c中定义并初始化变量
UART_HandleTypeDef *current_huart = &huart2;
在 main.h中仅声明变量,不进行初始化
extern UART_HandleTypeDef *current_huart;
以下为错误代码示例!!!
extern UART_HandleTypeDef *current_huart = &huart2;;
extern后只能声明不能初始化!!!
原因分析
定义、初始化、声明
定义:创建了一个变量,指定其类型,并分配存储空间
初始化:为变量赋初始值
声明:告诉编译器,变量在其他地方定义与变量的类型,只能声明不能初始化
举例:
错因
在 my_usart.c 中已经定义并初始化了 current_huart 变量,而在 main.h 中使用 extern 时不应再次初始化。extern 只能声明变量,表示该变量已在其他地方定义,不能重新初始化。extern 的作用只是让编译器知道这个变量存在,而不是重新定义或初始化它。