|
发表于 2013-12-29 21:04:34
|
显示全部楼层
本帖最后由 1ongquan 于 2013-12-29 21:10 编辑
给你简单总结一下:
一般一个C文件要搭配一个H文件,两者文件名相同,如 UART.c对于UART.h ,其它函数通过#include"UART.h",来调用UART.c里面定义的函数和变量
H文件里面是对同名的C文件里面内容的声明,C文件必须include同名的头文件,一般C文件需要用到的其它头文件(比如stdio.h),也在H文件里包含,见下面的例子
头文件一般要写成条件包含,这样在重复包含时,编译器自动把已经包含过的文件忽略掉
#ifndef __XXX_H
#define__XXX_H
#include <stdio.h>
.....
#endif
C文件里面写好的函数,要在对于的H文件挂个名,叫其它包含这个H的C文件知道这个函数的存在
H文件就像一个销售部,C文件是生产部,客户了解一个公司的产品都是从销售部了解的,不会关注他是怎么生产的;另一方面,销售部挂的东西,都是根据生产部来的,两个文件的关系基本可以用这个来比喻
C文件里面定义的全局变量要在头文件里面加extern 声明,叫其它包含这个H的C文件知道这里还有个全局变量
H文件里面可以定义宏,什么是宏? 看--> #define LEDBLINK() PORTA ^= (1<< LED) C文件直接使用LEDBLINK(); 编译之前会用PORTA ^= (1<< LED) 来进行替换
其它结构体也是要在H里面定义类型,但是必须在C文件里面例化 |
|