我在gui.h 中extern UINT32 error_number; 在gui.c中 定义static UINT32 error_number = 0; 报错说 warning C4211: 使用了非标准扩展: 将“extern”重新定义为“static”
时间: 2024-09-26 15:16:01 浏览: 37
您在`gui.h`中声明了一个`extern`类型的变量`error_number`,然后在`gui.c`中又定义了一个同名的`static`变量,这会导致编译器发出警告,因为`static`变量局部于`gui.c`文件内部,而`extern`表示的是全局可见。
当在头文件中声明一个变量为`extern`时,意味着你在其他文件中可以访问这个变量,而在相应的实现文件(这里是`gui.c`)中如果没有实际的声明,只允许对其进行初始化。所以,当你在`gui.c`中再次定义`error_number`为`static`时,实际上是在给已经`extern`声明的全局变量赋予了新的、仅限当前文件的私有含义,这违背了`extern`的初衷。
正确的做法应该是将`static`从`gui.c`移除,只在其中初始化,而在`gui.h`中保持`extern`声明,比如:
```c
// gui.h
extern UINT32 error_number;
// gui.c
UINT32 error_number = 0; // 移除了static,因为这里只负责初始化
```
这样就不会报错,并能保证`error_number`作为全局变量在程序其他部分也能被访问。
相关问题
extern uint32 __minu( uint32, uint32) __attribute__((intrinsic_pseudo(3, "min.u") ));
`extern uint32 __minu( uint32, uint32) __attribute__((intrinsic_pseudo(3, "min.u") ));`是一条C语言的函数声明语句,它声明了一个名为`__minu`的函数,该函数有两个参数,均为`uint32`类型。`__attribute__((intrinsic_pseudo(3, "min.u") ))`是一个gcc编译器特有的语法,表示该函数是一个内置函数,并且在编译时会被优化为汇编指令。具体来说,这个函数是用来实现两个`uint32`类型的数值比较,返回较小值的函数。"min.u"是汇编指令的名称。
如果你需要使用这个函数,可以在代码中直接调用它即可。需要注意的是,该函数并不是标准C语言库的一部分,因此可能不会在所有的编译器和平台上都得到支持。如果在编译过程中遇到问题,可以参考相关编译器文档或者更换其他可用的函数实现。
#include "stm32f4xx_hal.h" #ifdef HAL_FLASH_MODULE_ENABLED #define FLASH_TIMEOUT_VALUE extern FLASH_ProcessTypeDef pFlash; static void FLASH_MassErase(uint8_t VoltageRange, uint32_t Banks); static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WRPSector, uint32_t Banks); static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WRPSector, uint32_t Banks); static HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t Level); static HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t Iwdg, uint8_t Stop, uint8_t Stdby); static HAL_StatusTypeDef FLASH_OB_BOR_LevelConfig(uint8_t Level); static uint8_t FLASH_OB_GetUser(void); static uint16_t FLASH_OB_GetWRP(void); static uint8_t FLASH_OB_GetRDP(void); static uint8_t FLASH_OB_GetBOR(void);
这段代码片段是针对 STM32F4 系列微控制器中的 Flash 内存进行操作的函数和数据结构的声明和定义。该代码是使用 STM32Cube HAL 库开发的,用于提供对 Flash 内存的擦除、写保护、读取和配置等操作。
其中,`FLASH_ProcessTypeDef` 是一个结构体类型,用于描述 Flash 操作的状态和结果。`FLASH_MassErase` 函数用于对 Flash 进行批量擦除操作,`FLASH_OB_EnableWRP` 和 `FLASH_OB_DisableWRP` 函数用于使能和禁用 Flash 的写保护功能,`FLASH_OB_RDP_LevelConfig` 函数用于配置 Flash 的读保护等级,`FLASH_OB_UserConfig` 函数用于配置 Flash 的用户配置项,`FLASH_OB_BOR_LevelConfig` 函数用于配置 Flash 的复位电压阈值。
另外,还有一些函数用于获取 Flash 的用户配置、写保护设置、读保护设置和复位电压阈值等信息。
需要注意的是,`FLASH_TIMEOUT_VALUE` 宏定义没有给出具体的值,需要根据实际需求进行设置。另外,`pFlash` 变量是一个外部变量,可能在其他地方定义和使用。
请注意,以上只是根据代码片段提供的信息进行的推测和解释,具体的功能和用法需要根据完整的代码和相关文档来确定。
阅读全文