硬编码变量,令人困惑的C语法

时间:2012-09-18 13:07:36

标签: c porting

当我遇到这段代码时,我正在阅读一些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

3 个答案:

答案 0 :(得分:6)

最有可能的是(将函数参数转换为void)以关闭编译器,否则会因未使用的参数而发出警告或错误。值是否在某处“硬编码”与所呈现的代码无关。

答案 1 :(得分:4)

声明

(void)someVariable;

将禁用任何编译器警告,表明函数中未使用参数someVariable

如果您查看后续代码,您可能会找到可以使用someVariable值的地方,而是硬编码以假设它是2

答案 2 :(得分: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在函数中扮演的角色,但是,假设某些变量为2,这个代码的行为就像旧代码一样。