C系列:关于initialized and declared ‘extern’的warning

本文探讨了在使用extern关键字声明全局变量时遇到的初始化警告问题,并分享了解决方案。通过将变量的声明与初始化分离,可以有效避免此类警告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在引用全局变量的过程中,一开始这样引用
extern int print = 2;

结果报 'print' initialized and declared 'extern' 警告,后来把引用和赋值分开写,Warning disappear
extern int print; /*引用外部/全局变量*/
print = 2;

记:我是个追求完美的人,至少在程序的世界里是这样。看到写得不规范的程序,我的心就很纠结,就像这种Warning一样,虽然有时候它不影响程序运行,但看到这种Warning的提示心里就老不舒服.
*** Using Compiler 'V5.06 update 5 (build 528)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin' Build target 'APP' compiling usart.c... ../Core/Src/usart.c(27): error: #148: variable "rx_flag" has already been initialized volatile uint8_t rx_flag = 0; ../Core/Src/usart.c(31): error: #148: variable "rx_length" has already been initialized uint16_t rx_length = 0; ../Core/Src/usart.c(32): error: #147: declaration is incompatible with "uint8_t rx_buffer[256]" (declared at line 32 of "../APP/bsp.h") extern uint8_t rx_buffer[128]; ../Core/Src/usart.c(63): error: #18: expected a ")" HAL_UART_Receive_IT(&huart1,uart_rx_buffer,1 sizeof(rx_buffer)); ../Core/Src/usart.c: 0 warnings, 4 errors compiling dma.c... ../Core/Src/dma.c(40): error: #169: expected a declaration { ../Core/Src/dma.c: 0 warnings, 1 error compiling gpio.c... compiling main.c... ../Core/Src/main.c(113): warning: #223-D: function "task_run" declared implicitly task_run(); ../Core/Src/main.c: 1 warning, 0 errors compiling stm32f1xx_it.c... compiling stm32f1xx_hal_msp.c... compiling tim.c... compiling uart_app.c... ..\APP\uart_app.c(3): error: #20: identifier "UART_HandLeTypeDef" is undefined void HAL_UART_TxCpLtCallback(UART_HandLeTypeDef *huart) ..\APP\uart_app.c(15): error: #7: unrecognized token if(uart_rx_index == 0)return; ..\APP\uart_app.c(15): error: #125: expected a "(" if(uart_rx_index == 0)return; ..\APP\uart_app.c(15): error: #7: unrecognized token if(uart_rx_index == 0)return; ..\APP\uart_app.c(25): warning: #1-D: last line of file ends without a newline } ..\APP\uart_app.c: 1 warning, 4 errors compiling periph.c... compiling logic.c... compiling schedule.c... ..\APP\schedule.c(64): warning: #1-D: last line of file ends without a newline ..\APP\schedule.c: 1 warning, 0 errors compiling system.c... "APP\APP.axf" - 9 Error(s), 3 Warning(s). Target not created. Build Time Elapsed: 00:00:07
最新发布
07-20
*** Using Compiler 'V5.06 update 5 (build 528)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin' Build target 'APP' assembling startup_stm32f103xb.s... compiling stm32f1xx_it.c... ../Core/Src/stm32f1xx_it.c(247): error: #20: identifier "UART_CLEAR_NEF" is undefined _HAL_UART_CLEAR_FLAG(&huart1, UART_CLEAR_NEF); // 清除中断标志[^1] ../Core/Src/stm32f1xx_it.c: 0 warnings, 1 error compiling main.c... ../Core/Src/main.c(98): error: #20: identifier "hdma_usart1_tx" is undefined NABLE_DMA(); // 启用自定义DMA配置 ../Core/Src/main.c(111): warning: #223-D: function "task_run" declared implicitly task_run(); ../Core/Src/main.c: 1 warning, 1 error compiling dma.c... ../Core/Src/dma.c(42): error: #65: expected a ";" void Custom_DMA_Config(DMA_HandleTypeDef *hdma) { ../Core/Src/dma.c(56): warning: #12-D: parsing restarts here after previous syntax error HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 0, 0); ../Core/Src/dma.c: 1 warning, 1 error compiling usart.c... ../Core/Src/usart.c(27): error: #148: variable "rx_flag" has already been initialized volatile uint8_t rx_flag = 0; ../Core/Src/usart.c(31): error: #148: variable "rx_length" has already been initialized uint16_t rx_length = 0; ../Core/Src/usart.c(32): error: #147: declaration is incompatible with "uint8_t rx_buffer[256]" (declared at line 32 of "../APP/bsp.h") extern uint8_t rx_buffer[128]; ../Core/Src/usart.c(63): error: #18: expected a ")" HAL_UART_Receive_IT(&huart1,uart_rx_buffer,1 sizeof(rx_buffer)); ../Core/Src/usart.c: 0 warnings, 4 errors compiling stm32f1xx_hal_msp.c... compiling gpio.c... compiling tim.c... compiling stm32f1xx_hal_gpio_ex.c... compiling stm32f1xx_hal_rcc_ex.c... compiling stm32f1xx_hal_rcc.c... compiling stm32f1xx_hal.c... compiling stm32f1xx_hal_gpio.c... compiling stm32f1xx_hal_tim_ex.c... compiling stm32f1xx_hal_tim.c... compiling stm32f1xx_hal_dma.c... compiling stm32f1xx_hal_cortex.c... compiling stm32f1xx_hal_pwr.c... compiling stm32f1xx_hal_exti.c... compiling stm32f1xx_hal_flash.c... compiling stm32f1xx_hal_flash_ex.c... compiling stm32f1xx_hal_uart.c... compiling periph.c... compiling uart_app.c... ..\APP\uart_app.c(3): error: #20: identifier "UART_HandLeTypeDef" is undefined void HAL_UART_TxCpLtCallback(UART_HandLeTypeDef *huart) ..\APP\uart_app.c(15): error: #7: unrecognized token if(uart_rx_index == 0)return; ..\APP\uart_app.c(15): error: #125: expected a "(" if(uart_rx_index == 0)return; ..\APP\uart_app.c(15): error: #7: unrecognized token if(uart_rx_index == 0)return; ..\APP\uart_app.c(25): warning: #1-D: last line of file ends without a newline } ..\APP\uart_app.c: 1 warning, 4 errors compiling system_stm32f1xx.c... compiling system.c... compiling schedule.c... ..\APP\schedule.c(64): warning: #1-D: last line of file ends without a newline ..\APP\schedule.c: 1 warning, 0 errors compiling logic.c... "APP\APP.axf" - 11 Error(s), 4 Warning(s). Target not created. Build Time Elapsed: 00:00:17
07-20
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值