c语言的自定义头文件
1.为什么要用头文件,它里面可以包括那些内容?
2.为什么要自定义头文件?
下面是一个gprs模块的头文件,我现在知道的是它是自己定义的可是上面的2个问题还不是很清楚
[code=C/C++][/code]
#ifndef _MORDEM_H_
#define _MORDEM_H_
#define UartDataWait 10
#define HttpHeadWait 20
#define MAXBAUTSET 10
#define MAXBUFFERLEN 65536
#define ut_RspTimeWait 0xFFF0
#define ul_ConRspTimeWait 0x000FFFFF
#define PDU 0
#define TEXT 1
unsigned charSim300_Init();
voidTurnOnMordem();
unsigned char SetDnsOrIp( char par);
unsigned char SetDns( char * dnsstr);
unsigned char GetCommandRsp(void);
unsigned char ReadSetBaud( char *bautratestr);
unsigned char SetBautRate( char * bautratestr);
unsigned char SetBackShow( char par);
unsigned char SetSmsMode( char par);
void SetHost( char *strhost);
void SetPort( char *strport);
void SetUrl( char *strUrl);
void SetUa( char *strUa);
void SetAccept( char *strAccept);
void SetAcceptLanguage( char *strAccept_Language);
void SetAcceptEncoding( char *strAccept_Encoding);
void SetAcceptCharset( char *strAccept_Charset);
unsigned char ConnectSever( char *type, char *host, char *port);
unsigned char SendGprsData( char *strdata);
unsigned char HttpGet(void );
unsigned char InitMordem(void);
void TestGprs(void);
unsigned char TelCall(char *telnum);
unsigned char ATH();
unsigned char SendOneSMS(uchar ur_type,uchar *ur_phone,uchar *ur_content );
unsigned char SendSms();
unsigned char SearchNetStatus();
unsigned char CheckStatus();
unsigned char SendData(unsigned char *str);
unsigned char SendDataGprs(unsigned char *strdata);//通过gprs发送数据
void GprsInit();
#endif
[解决办法]
函数声明,类型定义,宏定义。。。都可以在头文件里定义
首先要知道C/C++是如何编译的
1)是以.c, .cpp, .cxx等文件为编译单位的,.h根本就不会被编译
2)某个文件include一个头文件,这个头文件就会在被include的地方展开,你可以想象你把头文件的内容拷贝到这里了
由以上的两点可以知道,不能被重复编译的函数定义,变量定义等不能放在头文件里(除非你保证这个头文件只被一个c文件包含,但也不推荐)
适合放在头文件里的东西就是那些被很多地方重复使用的东西,如函数声明,宏定义。。。
[解决办法]
.h相当于说明书 (一般放声明/接口)
.c相当于实现原理图 (一般放定义/实现)
.o相当于实物 (实现的二进制形式)
有了说明书,可以:
1.别人可以使用这个东西 (组合)
2.别人可以扩展你的东西 (继承/重载)
3.别人甚至可以仿造你的东西
至于将说明书和实现原理图分开是为了:
你知道我的东西是干啥的,你也可以用我的东西,但你不知道这个东西是怎么做出来的.