2

次のエラー メッセージが表示されます

error: '0' cannot be used as a function

次の行をコンパイルしようとすると:

NOOP(0 != width);

NOOP は次のように定義されます。

#define NOOP (void)0

ソース コードは SDK の一部であるため、問題ありません。そして、(void)0実際にC++で「操作なし」を説明する有効な方法であることを発見しました。しかし、何もしない関数にブール値のパラメーターを渡す必要があるのはなぜでしょうか? そして、どうすればエラーメッセージを取り除くことができますか?

4

2 に答える 2

5

MACRO にはパラメータが定義されていないため、プリプロセッサがコードを置き換えた後、そのステートメントは次のようになります。

(void)0(0 != width);

これはコンパイラを混乱させて、0 で "()" 演算子を使用しようとしていると考えさせます (つまり、0 を関数として使用します)。

「(0 != width)」(誤解を招きます) を削除して、NOOP とだけ記述することをお勧めします。

于 2012-11-06T00:07:53.387 に答える
4

" (void)0(0!=width);" は有効な C++ ではないため、OK ではありません。(void)0;それ自体では C++ では何もしないので、noop として使用できます。現在の定義の代わりに、次を使用します。

#define NOOP(X) (void)0

これは、C++ プリプロセッサに、任意のNOOP型の 1 つのパラメーターを取り、その関数呼び出し全体を. したがって、 というコード行がある場合、プリプロセッサはその全体をに置き換えますが、C++ コンパイラはそれを無視します。(void)0NOOP("HELLO WORLD")(void)0

于 2012-11-06T00:08:52.410 に答える