我正在使用这个生成骨架插件项目的sdk,就像在主机应用程序所需的所有功能一样,只是没有填充。
最初,所有函数定义都是这样的:
void Mod1::ModifyObject(TimeValue /*t*/, ModContext& /*mc*/, ObjectState* /*os*/, INode* /*node*/) {}
随着参数名称被注释掉,为什么会这样?据我所知,如果我没有使用这些参数,那么这些名称是否存在没有区别。
答案 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)
我猜这有两个原因:
故意只能实现必要的功能:功能名称及其签名。他们没有定义任何名称,因此您可以选择建议或自己(或根本没有)。
这是为了避免额外迂腐的编译器抱怨被定义为参数的未使用变量。如果您不需要参数,那么简单地删除它是最有效的(除非您在其他实现中需要它,但编译器不一定知道这一点)。但话又说回来他们也可以抱怨那里的参数,但没有命名(尽管你可以考虑故意省略)。