c - 包含头文件功能如何实现

标签 c

好的,所以我理解 #include 的工作原理是查找您要包含的内容并遵守该内容并将其替换为包含的位置。然而,当我假设这一点时,我的程序无法编译,并且到处都是 __ is undefined 。

例如,在我的 ma​​in.c 中会有类似的内容

#include "tim.h"
#include "tim_cfg.h"
#include "tim_api.h"

tim.h 包含一些typesdef,例如

typedef enum
{
RATE_DIV1 = 0X0,
RATE_DIV2 = 0X1,
RATE_DIV3 = 0X2,
RATE_DIV4 = 0X3,
RATE_DIV5 = 0X4,
RATE_DIV6 = 0X5,
RATE_DIV7 = 0X6,
RATE_DIV8 = 0X7,
RATE_DIV9 = 0X8
} BaseRate_T;

typedef unsigned char byte; 

tim_cfg.h 包含寄存器位置和基本struct

typedef struct
{
byte  TimerSize;         
byte  InterruptLevel;    
} TIMInfo_T;

tim_api.h包含tim函数的函数原型(prototype)

所以,问题是为什么我会收到错误

identifier "byte" is undefined

当我首先添加它时?

最佳答案

您应该遵循以下规则:每个头文件都应包含其工作所需的内容。

根据您的设置,如果有人单独包含 tim_cfg.h,则不会定义 byte 类型。

更好的解决方案是:

tim_cfg.h:
    #include "tim.h"
    typedef struct
    {
        byte  TimerSize;         
        byte  InterruptLevel;    
    } TIMInfo_T;

这样,当您包含 tim.cfg.h 时,所需的一切都已存在。

关于c - 包含头文件功能如何实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22721809/

相关文章:

c - C 中等效的代数数据类型

c - 将 jpeg 文件读取到 char* 缓冲区 c

c - 段错误背后的原因是什么?

c - Sprite 纹理中的透明度不起作用

c - 如何在 Ubuntu 上打开一个非修饰的全屏窗口

c - 测量udp服务器发送数据和客户端接收数据之间的延迟

c - RLE 编码...怎么了?

c - 使用 ptrdiff_t 或 size_t 进行索引

c - 为什么我可以分配比 RAM 更大的数组?

c++ - 使用 cygwin 在 Windows 中使用套接字