[置顶] 成为C++高手之头文件

但现在看起来真不爽,main.c依赖的文件不能在工程中管理,要修改那些文件的话麻烦大了。如何既能分成多个文件又能在工程中看到呢?可以,使用头文件(h文件)。

头文件中只放那些不产生内存占用的代码,比如定义结构(定义结构不会产生内存分配,只有用结构定义变量时才产生内存分配)、定义枚举,定义宏,声明变量,声明函数等。而且大都是1个c文件对应1个h文件。下面增加poker.h和player.h(注意main.c是不需要有h文件的,由于我们应当保证main.c只依赖别的文件,而不能被别的文件依赖),下面我们就把c文件中的结构、宏、枚举的定义移到对应的h文件中,然后再将变量和函数在h文件中增加声明,因而poker.h和player.h是这样的:

poker.h:

//1副牌的数量
#define CARD_COUNT 54
//定义扑克的花色
enum Suit{
heart,
spade,
diamond,
club,
joker1,
joker2
};
//定义扑克
typedef struct Card{
int value;//牌的点数从1开始
enum Suit suit;//花色
}Card;
//定义比较函数的类型
typedef int (*COMPARE)(Card* ,Card*);
extern Card pokers[CARD_COUNT];
void initOnePack();
char* getCardName(const Card*);
Card** shuffle(const Card*);
void sort(Card**,int,COMPARE);
int compare1(Card* ,Card*);
int compare2(Card* ,Card*);

player.h:

//定义玩家
typedef struct Player{
char name[64];//玩家的名字
Card ** cards;//玩家分到的牌。每项是1个指针,指向原始1副牌数组中的1项,这样可以节省空间
int cardsCount;//玩家分到的牌的数量
}Player;
void dispatchCards(Player** ,int ,const Card** );

main.c中不再include poker.c和player.c,而是改成include 头文件。但是player.c和poker.c中也应当include各自的头文件,由于它们用到的结构、枚举等移到头文件中了,而且编译器不会自动将同名的h文件和c文件关联。其实还不够,player.h中用到了Card结构的定义,因而player.h依赖poker.h,所以应在player.h中include poker.h。但是不幸的是,现在又出现了1大堆毛病,都是1些重定义或标志符冲突之类的毛病。如何解决这些毛病呢? 需使用条件编译指令!

我们看到过很多以#开头的令,比如#include、#define等。这些叫做编译指令。这些不产生实际的CPU指令,也就是说它们不是代码,但是编译器跟据它们处理代码的生成。这些编译指令还可使用条件语句来控制编译器的动作,下面我们就为player.h增加条件编译指令来解决重定义毛病。player.h变成了这样:

#ifndef PLAYER_H
#define PLAYER_H
#include "poker.h"
//定义玩家
typedef struct Player{
char name[64];//玩家的名字
Card ** cards;//玩家分到的牌。每项是1个指针,指向原始1副牌数组中的1项,这样可以节省空间
int cardsCount;//玩家分到的牌的数量
}Player;
void dispatchCards(Player** ,int ,const Card** );
#endif //PLAYER_C

上1篇:成为C++高手之提高可保护性

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » [置顶] 成为C++高手之头文件

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡