4

いくつかの C++ コードがあります

struct data {
    /* some fields */
};

typedef struct data * pData;

int function(pData pointer) {
    if(pointer == NULL)
        return ERROR;
    (void)pointer;
    /* other work */
}

"(void)pointer" とはどういう意味ですか?

参考までに、構造内でコールバック関数として使用される int/char*/etc という関数ポインタがいくつかあります。

4

4 に答える 4

10

未使用変数の警告を回避するために使用されます。

変数を使用する場合、それはノーオペレーションです。

ほとんど使用されていない変数はパラメーターであり、コールバック関数のシグニチャーを満たすために必要ですが、実際の実装では必要ありません。

Cf.

アップデート:

他に言及されていないという理由だけで:変数の型は何でもかまいません。ポインタ型に限定されません。

于 2013-03-20T15:43:14.827 に答える
6

それは多くを意味するものではありません。

式を評価し、pointerにキャストして明示的に無視しvoidます。

未使用の引数について警告しないようにコンパイラを説得しようとすると、この構造が表示されることがありますが、コードでは、引数がチェックされているため、引数はすでに使用されていNULLます。

于 2013-03-20T15:43:24.513 に答える
0

ポインタ値を「型なし」の値、または「型がない」値にキャストします。

void foo(); // absent of a return value 
int bar(void); // absent of parameters
void *var; // Type of the variable pointed to is absent
(void) var; // The type of the variable is absent
于 2013-03-20T15:49:11.973 に答える
0

未使用変数のコンパイラ警告を抑制する典型的な方法です。

ただし、ポインターは実際には として使用されるif(pointer == NULL)ため、そうする理由はありません。

推測するに、NULL チェックとリターンは、警告の抑制よりも後に追加されていると思います。

于 2013-03-20T16:04:53.247 に答える