1

私の質問はこれに非常に近いです: 関数ポインターの const 配列をどのように宣言しますか?

私のインクルードファイルに静的const関数ポインター配列を作成することに成功しました。

void fun1( void* );
void fun2( void* );
typedef void ( *funPointer )( void* );
funPointer myFunPointer[2] = { &fun1, &fun2 };

今、私は次のことを見つけました: 私のコンパイラ (gcc 4.6.3) は、

(1)このヘッダーを含めて異なる *.o ファイルをコンパイルし、後でそれらをリンクします(複数定義)-配列の宣言内で static キーワードを使用すると役立ちます(編集:実際には関数は静的に宣言する必要があります)。

(2) ヘッダーを含め、配列 const を設定せずにファイルをコンパイルします。(myFunPointer は宣言されていますが、使用されていません)

static const myFunPointer[2] ....

エラー/警告の両方を捕捉します。

ここで質問です: static は「事前定義された」メモリアドレスを使用し、関数のいくつかの宣言がアドレスでマージされるため、以前の動作を説明できます。この説明は正しいですか?const 宣言の警告がないことはどのように説明できますか? ファイルの不要なセクションを自動的に削除するのはコンパイラの機能ですか...?

4

1 に答える 1