1

私がいじくり回しているプログラムでこれを見ました:

static const void *method()
{
 // other code
 return anotherMethod(param1,param2);
}

私が理解していることですが、これは関数へのポインタを返します。今これに基づいて私はそれが何にstatic const void適用されるかを理解しようとしています:

int f(void);
int *fip(); //Function returning int pointer
int (*pfi)(); //Pointer to function returning int

それで、追加することの本当の利点は何static constですか(これが指定された関数の戻り値に適用されると仮定します)。また、関数へのリターンポインタが呼び出されますか?それともそれはそれへの単なるポインタですか?コードから私は次のことをしているからです:

void start()
{
  method();
}

私はそれが呼び出されると仮定しています、さもなければそれはポインタに割り当てられていたでしょう。

4

4 に答える 4

10

いいえ、関数は a を返し、関数const void*static可視性をファイル スコープに制限します。

于 2012-07-04T14:01:17.063 に答える
3

staticこれは、関数がコンパイルユニット(ソースファイル)にプライベートであり、コンパイルユニットの外部には表示されないことを意味します。

const void *戻り値が定数メモリ、つまり書き込まれてはならないメモリへのポインタであることを意味します。

于 2012-07-04T14:05:14.923 に答える
1

関数の前の static キーワードは、静的変数を返すという意味ではありません。関数が「静的」であることを意味します。つまり、この関数は、別のソース ファイルからコンパイルされたオブジェクト ファイルのような「外部」オブジェクトからはアクセスできません。

あなたが与えた例が返されます

const void*

また、この関数への外部参照へのリンクを拒否します。

于 2012-07-04T14:03:08.013 に答える
0
static const void *method()

「const void*」を返します。これは void* にキャストされた関数ポインターである可能性がありますが、一般的にはそうではありません。

void start()
{
  method();
}

ここでは、呼び出し元は単に結果に関心がありません。魔法はまったく起こっていません。

于 2012-07-04T14:03:49.493 に答える