有时我会看到这样的代码:
LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
为什么要注释参数名称而不是保留它?
答案 0 :(得分:12)
我认为有些编译器在没有使用参数的情况下发出了“未使用的参数”警告。
特别是在您展示的消息处理函数中,参数通常不是执行任务所必需的。因此,通过评论参数 names ,你可以摆脱警告。
另一方面,如果您以后想要使用某些参数,那么掌握名称是有用的,因此注释比仅删除名称更容易。
答案 1 :(得分:9)
我看到这样做的一个原因是你明确地想要告诉其他程序员不要使用这些参数,而是将它们留在注释中以获取其意图的描述。我知道现在没有意义,但请继续阅读。
我将使用另一个例子:
class A
{
public:
virtual void foo(int someProperty);
};
class B : public A
{
public:
virtual void foo(int /*someProperty*/);
};
假设您希望在特定情况下希望B::foo()
执行一些额外操作,然后使用参数A::foo()
调用0
。您必须保持相同的函数签名,因此多态性可以工作,但是,在B::foo()
内,您实际上并没有使用该参数。你也不想在将来使用它。它基本上是一个意图陈述,说“这种方法的逻辑不应该依赖于某些属性”。
B::foo(int/*someProperty*/)
{
//do some stuff
A::foo(0);
}
如果参数名称已注释掉,则无法真正使用它(除非你得到一些hacking)。但是注释后的名称会告诉您有关您传递给A::foo()
的参数的信息 - 来自A
的'someProperty'。
现在,我不同意语法,但这可能是一个可能的解释。
答案 2 :(得分:3)
如果确实不需要参数,则无需为其命名
如果你没有给他们起名字,乍一看你可能不明白他们为什么会在那里。
如果你给它们命名,一些编译器会警告你未使用的参数。
将名称留作评论是两种方法之间的中间立场。
答案 3 :(得分:2)
如果这是onPaint()
定义的开始,我已经看到用于避免"unreferenced formal parameter"
编译器警告的注释掉的参数名称(这些警告只出现在高警告级别,级别{{1对于Microsoft编译器而言。)
答案 4 :(得分:0)
如果被调用的函数(在您的示例中为OnPaint
)不使用参数,编码器可以在编译时通过不提供参数名称来避免有关未使用参数的警告消息。
答案 5 :(得分:0)
某些编译器在您对参数进行注释或不首先提供参数时不会发出“未使用的参数警告”。但是,当然你需要保留类型以获得正确的签名。