次のコードは誰に教えてください。それは関数宣言かステートメントですか?それは有効なコードですか?コードの説明は何ですか?
static void (*const handle_screens[NO_OF_SCREENS]) (void) =
{ status_screens, settings_screens, access_screens, configuration_screens,
history_screens };
次のコードは誰に教えてください。それは関数宣言かステートメントですか?それは有効なコードですか?コードの説明は何ですか?
static void (*const handle_screens[NO_OF_SCREENS]) (void) =
{ status_screens, settings_screens, access_screens, configuration_screens,
history_screens };
それがその署名void foo(void)
これらの関数ポインタの定数配列が容易なものです。 Google C Complex Declarationはエキサイティングなものです。
'void foo(void)'または 'void * foo(void)'ですか?私は最近、厄介な関数ポインタの構文を見失ってしまった。 –
が許可されました。 voidを取ってvoidを返すfuntionsへのポインタの配列。私は思う。 – EnabrenTane
Cの宣言と定義をデコードする方法をカバーするcommon rule(私は自分の記憶をリフレッシュしました)があります。そのリンクの指示に従うと、宣言は次のようになります。のエントリがconst
の静的配列の場合、void
を返す引数を持たない関数へのポインタがhandle_screens
です。
この配列は5つの関数で初期化されているので、NO_OF_SCREENSは5であると個人的には思います。これは、関数定義がvoid foo(void)
であるという意味でEnabrenTaneが正しいことを意味します。
他のすべてが失敗し、宣言が宣言されていることが100%わからない場合は、cdecl
ユーティリティを確認してください。これはLinuxのユーティリティですが、誰かがcdecl.orgにウェブインタフェースを作成しています。 NO_OF_SCREENS
の#defineのために挿入するためにランダムな番号を選んで、あなたが得る:
> static void (*const handle_screens[1]) (void);
declare handle_screens as static array 1 of const pointer to function (void) returning void
ニースサイト。私はCプログラミングに再び鞍を打つなら、それを使用します。 –
「それは有効なコードですか?」それを入力してコンパイルすることで答えられます。残りの部分については、関数ポインタの配列のように見えます。各関数ポインタは、パラメータを持たない関数を指し、ある種のものとしておそらく使われている不透明なデータ型( 'void *')または無し( 'void')スクリーンハンドラの –
私は彼らがVoidを返すと信じています*それは void *(* const handle_screens [NO_OF_SCREENS])(void) – EnabrenTane
そうですね、EnabrenTane。私はちょうど右と左のルールをダブルチェックしました。 –