C 如何包含头文件功能
好的,我如何理解“包含”的工作原理是查找您要包含的内容,并遵守它,然后在包含的地方替换它。然而,当我假设这一点时,我的程序没有编译,它给出的_u是未定义的 例如,当在mymain.c中C 如何包含头文件功能,c,C,好的,我如何理解“包含”的工作原理是查找您要包含的内容,并遵守它,然后在包含的地方替换它。然而,当我假设这一点时,我的程序没有编译,它给出的_u是未定义的 例如,当在mymain.c中 #include "tim.h" #include "tim_cfg.h" #include "tim_api.h" tim.h包含一些typesdefs类 typedef enum { RATE_DIV1 = 0X0, RATE_DIV2 = 0X1, RATE_DIV3 = 0X2, RATE_DIV4 =
#include "tim.h"
#include "tim_cfg.h"
#include "tim_api.h"
tim.h包含一些typesdef
s类
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
s
typedef struct
{
byte TimerSize;
byte InterruptLevel;
} TIMInfo_T;
和tim_api.h包含tim函数的函数原型
所以,问题是我为什么会出错
identifier "byte" is undefined
当它是我包含的第一件事时?您应该遵循规则,即每个头文件都应该包含它需要工作的内容 在您的设置中,如果某人自己包含
tim_cfg.h
,则不会定义字节类型
更好的解决办法是:
tim_cfg.h:
#include "tim.h"
typedef struct
{
byte TimerSize;
byte InterruptLevel;
} TIMInfo_T;
这样,,tim.cfg.h
包含时所需的一切都在那里。typedef不应该处理包含在第一个include中的错误吗第一个include链接中的typedef不应该包含这两个链接吗?tim.h
本身是否也包含tim\u api.h
在typedef
之前的某个点?如果不太长,发布整个tim.h
,或者至少发布到并包括TIMInfo\u T
的部分。如果您将其简化为typedef
、struct
和一个主程序(比如打印sizeof(TIMInfo\u T)
),则工作正常,因此正在进行其他操作。tim_api.h
中有代码吗?这有时会产生奇怪的效果。tim_api.h中只有extern voids