2012-01-24 13 views
4

このステートメントは何を説明できますか?C++、プリプロセッサのステートメント

#define CONST_SIG (void (*)()) 1 
+0

あなたは理解しづらい部分はありますか?あなたは '#define'が一般的に何をしているのか知っていますか? –

+1

全体としては、表現全体に余分な括弧があることが推奨されますが、キャストは十分に高い優先順位を持ち、おそらくそれはおそらく安全です。 –

答えて

3

この文にはパラメータや戻りvoidを取得していない関数へのポインタにキャスト1するCONST_SIGを定義します。このは、関数へのポインタがあり、真実性をテストする場合に便利です。CONST_SIGがtrueになります。

多くのLinuxディストリビューションで利用可能なcdeclプログラムを使って、C宣言の "英語翻訳"を試すことができます。このときの出力例:

cdecl> explain (void (*)()) 
cast unknown_name into pointer to function returning void 

余談:私たちのポインタに名前がないので、それは「unknown_name」と言う理由があります。たとえば、 "p"と名前を付けると、次のようになります。(void (*p)())

3

関数ポインタを必要とする関数にCONST_SIGを渡し、この関数ポインタの値として1を扱います。