很多人开始的时候都是一个main.c加上一堆模块头文件,在模块头文件中直接写函数和变量,因为只有一个c文件所谓不会出错。
但改成每个模块下一个C文件对应一个头文件的时候灾难就来了,需要将函数和变量全弄到C文件中,想要让外界使用的变量和函数
就在头文件中声明,并加extern关键词。
再进一步管理头文件,可以使用一个总的接口文件来包含头文件,而在C文件中只需要包含一个接口头文件就OK了,这样文件包含会变得
很直观和清爽,减少因为文件包含而导致的问题。
再再进一步就是文件结构分层,简单点的就是HAL层(硬件隔离层)和APPLICATION层(应用层)、LIB层(库层)每个层用一个接口文件
总领,HAL层包含LIB_PORT.H,APPLICATION层包含LIB_PORT.H和HAL.H。
另外在接口文件中的包含顺序是有讲究的,虽然顺序不会影响到C文件,但是会影响到H文件。
比如,app_menu.h中声明了这样一个函数 extern uint8_t menu_init(menu *me);其中uint8_t定义在LIB层的lib_stdint.h中,
那么application_port.h如果这样写的话就会报错:
#ifndef _application_port.h_
#define _application_port.h_
#include "app_menu.h" //0
#include "LIB_PORT.H" //1
#endif //_application_port.h_
提示uint8_t没有被定义~~将0步移到1后面就能解决问题。 |