注释掉函数参数名称的目的是什么?

时间:2015-02-19 07:32:56

标签: c++

我正在使用这个生成骨架插件项目的sdk,就像在主机应用程序所需的所有功能一样,只是没有填充。

最初,所有函数定义都是这样的:

void Mod1::ModifyObject(TimeValue /*t*/, ModContext& /*mc*/, ObjectState* /*os*/, INode* /*node*/) {}

随着参数名称被注释掉,为什么会这样?据我所知,如果我没有使用这些参数,那么这些名称是否存在没有区别。

3 个答案:

答案 0 :(得分:1)

某些编译器会发出有关未使用的命名参数的警告,但不会发出有关未使用的未命名参数的警告。如果使用-Wunused-parameter选项,GCC就是一个这样的编译器,由-Wextra启用。

这背后的理论是,未使用的命名参数比未使用的未命名参数更可能是错误。当然,该理论并不适用于所有代码。

答案 1 :(得分:1)

当您启用将警告视为错误,并且您不使用参数时,您需要注释掉其名称或将其完全删除。

Qt中有时会出现诸如Q_UNUSED之类的宏,或者你可以在代码中引用它而不做任何事情来使编译器闭嘴。

void foo(int unused) {
    (void) unused; // So the compiler doesn't emit a warning.
}

答案 2 :(得分:1)

我猜这有两个原因:

  • 故意只能实现必要的功能:功能名称及其签名。他们没有定义任何名称,因此您可以选择建议或自己(或根本没有)。

  • 这是为了避免额外迂腐的编译器抱怨被定义为参数的未使用变量。如果您不需要参数,那么简单地删除它是最有效的(除非您在其他实现中需要它,但编译器不一定知道这一点)。但话又说回来他们也可以抱怨那里的参数,但没有命名(尽管你可以考虑故意省略)。