2

当我被困在这段代码上时,我正在浏览一些 C 代码。

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

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

作者的评论是什么意思,“ someVariable is hardcoded to 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);
    …
}

所以,发生的事情是:

  • 在“someFunction”中出现“someVariable”的所有地方,作者都将其替换为“2”。
  • 然后作者减少了表达式,让“someVariable*3”变成了“2*3”,然后变成了“6”。这解释了为什么在 someFunction 中看不到“someVariable”以及为什么在 someFunction 中看不到“2”。

换句话说,someFunction 的代码现在的行为方式与原始代码在 someVariable 为 2 时的行为方式相同。您将 someFunction 的主体描述为“与 someVariable 无关的某些处理”,但实际上,它是使用2 对于 someVariable 的变量。someVariable 在函数中扮演的任何角色都已因编辑而丢失,但是,只要 someVariable 为 2,该代码的行为可能与旧代码一样。

于 2012-09-18T13:29:00.980 回答