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

What is the purpose of commenting out function argument names?

本文关键字:是什么 函数 参数 注释      更新时间:2023-10-16

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

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

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

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

我想这有两个原因:

  • 本质上只实现必要的东西是经过深思熟虑的:函数名称及其签名。他们没有定义任何名字,所以由你自己选择建议或自己的(或者根本没有)。

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

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

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

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

Qt中有时会有Q_UNUSED之类的宏,或者你可以在代码中引用它,而不需要做任何事情来关闭编译器。

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