注释掉函数参数名称的目的是什么
What is the purpose of commenting out function argument names?
我正在使用这个生成骨架插件项目的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.
}
相关文章:
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 是什么让放置新调用对象的构造函数?
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 在函数中拥有函数原型的目的是什么?
- 使用基类指针调用基类的值构造函数的语法是什么?
- C++:使用方法调用析构函数的顺序是什么?
- 将此布尔值传递给此函数的最有效方法是什么?
- * 和 ** 在 C++ 函数声明中是什么意思?
- C++:Lambda 函数指针转换的用例是什么?
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 在将函数声明为友元时,尖括号的含义是什么?
- 在模板类之外定义友元函数的正确方法是什么?
- 在使用包含冒号的类似函数的宏时,是什么导致了这种编译器差异?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 这里的字符串函数是什么意思
- 传递 lambda 函数的权衡是什么?
- 在C 中,对2D数组的增量是什么?函数断言(0)做什么?