2014-03-28 81 views
0

好吧,所以我怎么理解#include作品是通过查找你包括并遵守它,并将其替换包含在哪里。但是,当我假设这一点时,我的程序不能编译,并且它在整个地方都是未定义的。如何包含头文件功能

例如,当我在main.c中将有类似

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

tim.h包含像

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一些typesdef s包含寄存器位置和基本struct s

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

tim_api.h包含TIM的函数原型功能

所以,问题是为什么会出现错误

identifier "byte" is undefined 

当第一件事,我包括什么呢?

+0

不应该typedef照顾包含在第一个包括的错误 – Chrusciki

+0

should'nt typedef在第一个include链接两个? – Chrusciki

+0

'tim.h'本身是否包含'tim_api.h',在'typedef'的位置?如果不是太长,请发布整个'tim.h',或者至少包含'TIMInfo_T'的部分。 – TypeIA

回答

1

你应该遵循的规则头文件应该包括它需要的工作。

使用您的设置,如果某人自己包含tim_cfg.h,则不会定义byte类型。

一个更好的解决办法是:

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

这样,一切所需要的tim.cfg.h是那里当你包括它。