[セットトップ]C++上級者の頭ファイルになる

3777 ワード

でも今は気分が悪いわc依存するファイルは工事中に管理できないので、それらのファイルを修正するのは面倒です.どのようにして複数のファイルに分けて工事で見ることができますか?はい、ヘッダファイル(hファイル)を使用します.
ヘッダファイルには、メモリ占有を生成しないコードのみが格納されます.たとえば、定義構造(定義構造はメモリ割り当てを生成せず、構造で変数を定義する場合にのみメモリ割り当てが生成されます)、定義列挙、定義マクロ、宣言変数、宣言関数などです.また、ほとんどはcファイルがhファイルに対応している.次にpokerを追加します.hとプレイヤーh(main.cはhファイルを必要としないことに注意してください.main.cは他のファイルに依存するだけで、他のファイルに依存できないことを保証しなければならないからです.以下、cファイルの構造、マクロ、列挙の定義を対応するhファイルに移動し、変数と関数をhファイルに宣言します.poker.hとプレイヤーhはこうです.
poker.h:
//      
#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;//      。       ,             ,        
    int cardsCount;//         
}Player;
void dispatchCards(Player** ,int ,const Card** );

main.c中はもうinclude poker.cとプレイヤーcではなくincludeヘッダファイルに変更します.でもプレイヤーcとpoker.cではincludeのそれぞれのヘッダファイルも使用されるべきで、それらが使用する構造、列挙などがヘッダファイルに移動し、コンパイラは同名のhファイルとcファイルを自動的に関連付けないからです.実はまだ足りない、player.hではCard構造の定義が用いられ,player.h依存poker.hだからプレイするべきだh中include poker.h.しかし、残念なことに、再定義やフラグ競合などのエラーが多数発生しています.これらのエラーをどのように解決しますか?条件コンパイル命令が必要です!
include、defineなど、#で始まる命令をたくさん見たことがあります.これらをコンパイル命令と呼ぶ.これらは実際のCPU命令、すなわちコードではないが、コンパイラはそれらに基づいてコードの生成を処理する.これらのコンパイル命令は、条件文を使用してコンパイラの動作を制御することもできます.次にplayerです.h条件コンパイル命令を増やして再定義エラーを解決する.player.hはこうなりました.
#ifndef PLAYER_H
#define PLAYER_H
#include "poker.h"
//    
typedef struct Player{
    char name[64];//     
    Card ** cards;//      。       ,             ,        
    int cardsCount;//         
}Player;
void dispatchCards(Player** ,int ,const Card** );
#endif //PLAYER_C

下一篇:C++の達人になってメンテナンス性を高める