Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何包含头文件功能_C - Fatal编程技术网

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 =

好的,我如何理解“包含”的工作原理是查找您要包含的内容,并遵守它,然后在包含的地方替换它。然而,当我假设这一点时,我的程序没有编译,它给出的_u是未定义的

例如,当在mymain.c

#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