2012-03-21 14 views
8

他の誰かが書いたコードを発見しました。ヘッダファイルには静的と宣言されたいくつかのグローバル関数があります。関数自体は別々の実装ファイルで定義されています。 AFAIK、静的関数定義は、関数が定義されている変換単位の外側には表示されません。もしそうなら、ヘッダファイルに静的関数を宣言するのは何ですか?まあヘッダーファイルの静的なグローバル関数を宣言する

// in some header file 
static void foo(); 


// in some implementation file 
static void foo() 
{ 
.... 
.... 
} 
+0

これは価値がある:http://stackoverflow.com/questions/92546/variable-declarations-in-header-files-static-or-not –

答えて

6

static宣言された関数は、それらがで定義されているソースファイルにのみ表示されます。別のヘッダーでそれらを宣言することは良いアイデアではありませんが。私も、開発者がこれを行ったいくつかのケースを見てきました。彼らはそれを順番に並べて、ある機能を別の機能から呼び出すことができます。ここに私の意味は次のとおりです:

/* In header */ 
static void plus(int); 
static void minus(int); 
static void multiply(int); 

/* In source file */ 
static void minus(int v) 
{ 
    /* So plus can be called in minus without having to define it 
    * before minus */ 
    plus(); 
} 

static void plus(int v) { /* code */ } 

しかし、これはかなり悲惨なやり方です。より良い解決策は、実装する前にソースファイル内の関数staticのプロトタイプを作成することです。

+1

合意された、それはプロトタイプ関数には恐ろしい方法です。そのコードを書いた人がもう私たちのために働かないのは良いことです。 – pic11

関連する問題