2012-02-14 7 views
0

初めて、私は単純なプログラムのための実際のプロフェッショナルなCコードを書くことを試みていました。複数のヘッダファイルとソースファイルを使ってCで変数と関数を整理する際の警告

1)ヘッダーファイル名をEssential_data.hにして、その中のすべての関数とグローバル変数を宣言しました。私は.. externと私のすべての変数を宣言していたし、すべての関数の宣言は、通常

例えば行われました。

void test(); 
extern int x; 

2)それから私はmain_data.hという名前の別のヘッダファイルを作り、そこにすべての私のグローバル変数を定義しました。例えばint x; ;

3)その後、それぞれの関数の定義を含む対応するソースファイルを作成し、グローバル変数が必要なソースファイルにmain_data.hを含めました。

thats all。私はコンパイル時にプロジェクトが、私は、次の

をしたので、後に機能検査の

暗黙の宣言[-Wimplicit-関数宣言]

として、すべての機能のための多くの警告を得た後、 1)Essential_data.hの関数宣言の前にexternを置きます。例えばのための :

extern void test(); 

2)main_data.hで、私は、通常の関数を宣言し、私の​​Essential_data.hのみなし他にどこのメイン機能にあった時間の両方

void test(); 

を書きました。

その後、すべての警告が消えて再コンパイルされました。

これは適切な方法だったのですか、それとももっと効率的に整理する方法がありますか?

+0

最後の文でどのような「書き込み方法」を参照していますか? –

+0

正しい方法は、私が何をしたとしても、標準的なプログラミングかどうかということでしたか?私は職業が彼らのヘッダーとソースファイルを編成する方法であることを意味しますか? – neo1691

答えて

0

あなたが持っている必要があります。extern宣言(関数やオブジェクト)を含む

  • つ以上.hファイルを。これらのファイルは、これらのシンボルが必要なファイル.cに含まれている必要があります。

    :あなたは(各識別子は正確に一度宣言する必要があります)あなたが関数を定義し、あなたの例では

をどのオブジェクトに

  • つ以上.cのファイルを複数の宣言を持つべきではありません

    /* essential_data.h */ 
    void test(); 
    extern int x; 
    
    /* something.c */ 
    #include "essential_data.h" 
    
    int x; 
    void test() 
    { 
        /* ... */ 
    } 
    
    /* main.c */ 
    #include "essential_data.h" 
    
    /* ... */ 
    
  • +0

    私はessential_dataを含めた以外はまったく同じパターンを持っていました。hはメインファイル内にのみ存在します。 – neo1691

    +0

    更新:main_data.hからすべてのextern関数宣言を削除し、関数のソースファイルにEssential_data.hをインクルードしました。警告が消えました..ありがとうcnicutar !! – neo1691

    関連する問題