2

このコードに行き詰まったとき、私はちょうどいくつかのCコードを調べていました。

void someFunction(Int32 someVariable)
{
    /* someVariable is hard coded to 2 */
    (void)someVariable;

    //some processing that has nothing to do with someVariable.
}

「 someVariableは2にハードコードされています」というコメントの意味は何ですか?正確には何が起こっているのsomeVariableですか?

4

3 に答える 3

6

ほとんどの場合、これ(関数の引数のキャストvoid)はコンパイラをシャットダウンするために実行されます。そうしないと、未使用の引数が原因で警告またはエラーが発生します。値がどこかで「ハードコーディング」されているかどうかは、提示されたコードとは無関係です。

于 2012-09-18T13:10:19.793 に答える
4

ステートメント

(void)someVariable;

パラメータが関数内で使用されていないことを警告するコンパイラを無効someVariableにします。

後続のコードを見ると、の値を使用できる場所が見つかる可能性がありますがsomeVariable、代わりに、の値であると想定するようにハードコーディングされています2

于 2012-09-18T13:10:09.180 に答える
2

これは、コードが次のようになっていることを意味します。次に例を示します。

// Somewhere else in the source:
…someFunction(2)…
…
…x = 2;…
…someFunction(x)…
…
// Et cetera, the point being that whenever someFunction is called, its argument always has the value 2.

// The definition of someFunction:
void someFunction(Int32 someVariable)
{
    foo(someVariable*3);
    y = someVariable*7 - 4;
    bar(y);
    …
}

そして作者はそれをこれに変更しました:

// The definition of someFunction:
void someFunction(Int32 someVariable)
{
    (void) someVariable;
    foo(6);
    y = 10;
    bar(y);
    …
}

だから、起こったことは:

  • 「someVariable」が「someFunction」に登場するところはどこでも、作者はそれを「2」に置き換えました。
  • その後、作者は表現を減らし、「someVariable*3」が「2*3」になり、次に「6」になりました。これは、someFunctionに「someVariable」が表示されない理由とsomeFunctionに「2」が表示されない理由を説明しています。

つまり、someFunctionのコードは、someVariableが2の場合の元のコードの動作と同じように動作するようになりました。someFunctionの本体を「someVariableとは関係のない処理」と表現しますが、実際には、 someVariableの変数の場合は2。関数でsomeVariableが果たした役割はすべて編集によって失われましたが、おそらく、someVariableが2である限り、このコードは古いコードと同じように動作します。

于 2012-09-18T13:29:00.980 に答える