使用(void)someInt背后的原因;在代码中

时间:2014-01-10 17:17:39

标签: c++

我正在阅读我正在使用的库的一些代码,我发现在一个函数中使用了它:

void someFunction(Foo& a, int index, int partId)
{
    (void) partId;
    (void) index;
    // more code
}

任何人都知道为什么?感谢。

4 个答案:

答案 0 :(得分:9)

避免编译器警告/错误,指示函数体中未使用该变量。它是一种风格选择,实现相同效果的另一种方法是将变量保留为未命名:

void someFunction(Foo& a, int /*index*/, int /*partId*/)

答案 1 :(得分:3)

通常在函数中未使用参数且编译器发出有关未使用参数的警告时执行此操作。通过添加案例,编译器将认为它们已被使用,而不是发出警告。

我只需从函数中删除参数名称即可完成同样的事情:

void someFunction(Foo& a, int, int)
{
}

答案 2 :(得分:1)

IndexpartId未在函数内部使用。

C / C ++编译器通常会抛出有关未使用参数的警告。

(void) parameter;语句不会生成任何代码,但让编译器知道您正在使用该参数,以避免上述警告。

这也是让另一个程序员轻易知道参数因某种原因未被使用的礼貌方式 (通常,遵循更通用的接口或支持来自同一接口的先前版本的过时参数)。

最后但并非最不重要的是,正如Jerry Coffin指出的那样,这在C和C ++中都适用,而使用未命名参数的替代解决方案仅适用于C ++。

答案 3 :(得分:0)

它的作用是使用 partIdindex,而不实际使用它们。换句话说,它欺骗编译器认为函数参数实际使用,而实际上代码不使用它们。

为什么会这样做?因为它们在编译器中设置了一个标志,以便在函数的参数未在其体内使用时生成警告。

请注意,在C ++中,可以简单地从函数中删除参数名称。如果在C中看到,请尝试在未使用的函数参数上禁用警告,因为您不能省略参数名称。