为什么会有这么多类型呢

当我们刚开始接触C语言的时候 我们长长可以看到这些类型那么这些类型所占的空间有多大呢我们可以用一个sizeof来查看

注释; 在C语言中, sizeof () 是一个判断数据类型或者表达式长度的运算符 C语言中,要使用 sizeof ()不需要包含 头文件 ,因为 sizeof 实际是C语言的一种单目运算符,也是关键字之一,可以直接使用

 

我们可以很明显的看到结果

这些数字的单位是byte也就是字节。在计算机数据存储中,存储数据的 基本单位是 字节 (Byte), 最小单位是 位 (bit)。. 8个bit组成一个Byte ( 字节 ),能够容纳一个英文 字符 ,不过一个汉字需要两个字节的 存储空间 !. 1024个字节就是1KByte( 千字节 ),简写为1KB

当我们只要表示一个一到一百的整数我们有两个字节就完全足够了如果用四个字节反而会更加的浪费空间。创造出这些类型有利于我们根据实际情况选择类型提高空间利用率

 

# 问题重述 用户上传了一张包含大量编译错误的截图(`cknow_20251120_011509.jpg`),显示项目中出现“identifier 'HAL_StatusTypeDef' is undefined”等多个错误,以及“function declared implicitly”等警告。用户疑惑为何会有如此多报错,即使已添加相关文件。 --- # 详解 根据你提供的图片内容,该项目是一个基于 **STM32 HAL 库** 的嵌入式工程(文件路径含 `stm32f1xx_hal_dma.h`、`stm32f1xx_hal_flash.h`),使用 Keil μVision 或类似 IDE。 当前报错可分为两类:**致命错误(30 errors)** 和 **警告(Warnings)**,我们逐一分析根本原因。 --- ## 🔴 一、核心错误:`identifier "HAL_StatusTypeDef" is undefined` 这是所有错误中最关键的问题,出现在多个 `.h` 文件中,例如: ```c Driver/Inc/stm32f1xx_hal_dma.h(383): error: #20: identifier "HAL_StatusTypeDef" is undefined Driver/Inc/stm32f1xx_hal_flash.h(96): error: #20: identifier "HAL_LockTypeDef" is undefined ``` ### ❌ 根本原因:**头文件包含顺序错误或缺失全局头文件** `HAL_StatusTypeDef` 是 STM32 HAL 库的基础类型定义,位于 `stm32f1xx_hal_def.h` 中。 如果你的某个头文件(如 `hal_dma.h`)**在未先包含 `stm32f1xx_hal_def.h` 的情况下就被编译器处理**,就会因不认识 `HAL_StatusTypeDef` 而报错。 > ⚠️ 这不是“没加文件”,而是“没正确包含依赖链”。 --- ## 🔴 二、常见诱因分析 | 问题 | 说明 | |------|------| | 🚫 未包含主 HAL 头文件 | 主源文件(如 `main.c`)应首先包含:`#include "stm32f1xx_hal.h"`,它会内部包含所有基础定义。若缺失此句,则所有 HAL 组件都无法识别彼此。 | | 🚫 头文件包含顺序混乱 | 若你在 `.c` 文件中先包含了 `hal_dma.h` 再包含 `hal.h`,可能导致前者在定义前被解析。 | | 🚫 工程配置未启用 HAL 宏定义 | 需确保编译器定义了:`USE_HAL_DRIVER` 和 `STM32F103xB`(或其他具体型号)。否则 `hal.h` 不会启用 HAL 层功能。 | | 🚫 文件未加入编译路径或未被索引 | 虽然你“手动添加了 .h”,但如果未正确加入项目或未刷新索引,IDE 可能未真正加载它们。 | | 🚫 使用了错误版本的 HAL 库 | 不同版本间结构变化较大,若头文件不配套(如混用 F4 和 F1 的头文件),会导致类型不匹配或缺失。 | --- ## 🟡 三、关于警告:`function "MotorRight" declared implicitly` 该警告表示你在调用 `MotorRight()` 时,**编译器尚未看到它的声明**。 即使函数实现在 `MOTOR_R.c` 中,也必须通过头文件 `MOTOR_R.h` 声明,并在 `main.c` 中使用: ```c #include "MOTOR_R.h" ``` 否则编译器会假设该函数返回 `int`,参数任意 —— 这在 C99 后是**非法的隐式声明**。 --- ## ✅ 解决方案汇总 1. **在 `main.c` 最顶部加入标准初始化头文件:** ```c #include "stm32f1xx_hal.h" ``` 2. **确保编译器定义了必要宏:** - `USE_HAL_DRIVER` - `STM32F103xx` (根据你的芯片型号调整) > Keil 中路径:Project → Options → C/C++ → Define 3. **检查所有 `.h` 文件是否都加入了项目且可访问** 4. **确认 `MOTOR_R.h`、`MOTOR_L.h` 等用户头文件中声明了函数原型:** ```c void MotorRight(void); void MotorLeft(void); ``` 5. **在 `main.c` 中包含这些头文件:** ```c #include "MOTOR_R.h" #include "MOTOR_L.h" ``` 6. **清理并重建整个项目(Build → Rebuild All)** --- # 知识点 - **HAL库依赖关系**:`HAL_StatusTypeDef` 等类型定义在 `stm32f1xx_hal_def.h` 中,必须由主头文件 `stm32f1xx_hal.h` 引入,否则组件间无法通信。 - **编译器宏定义作用**:`USE_HAL_DRIVER` 控制 HAL 初始化流程是否启用;缺少它将导致外设初始化失败或头文件跳过声明。 - **隐式函数声明禁用(C99)**:C标准规定不允许使用未声明函数,必须通过头文件暴露接口,否则触发警告/错误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值