无效且使用4级警告进行编译的函数

时间:2011-03-27 22:13:18

标签: c++ compiler-warnings

有时你有一个被设计为继承的类,但并不是所有的函数都应该一直使用。因此,为了使更易读和更容易维护的派生类,定义了可继承的函数,但它们是空的(而不是纯虚拟的)。来自RakNet的一个例子

    virtual void OnDirectSocketReceive(const char *data, const BitSize_t bitsUsed, SystemAddress remoteSystemAddress) {(void) data; (void) bitsUsed; (void) remoteSystemAddress;}

现在在大多数情况下,该函数有一些参数,在4级警告上,它会发出警告,不使用函数参数。我目前正在关注上面的RakNet示例,并且对数据一无所知。这是摆脱警告的标准/常用方式吗?这个设计可以完全避免吗?任何一般的想法/见解/建议?

6 个答案:

答案 0 :(得分:9)

另一种方法是不命名参数。这表明该函数无意使用它们:

virtual void OnDirectSocketReceive(const char* /*data*/, const BitSize_t /*bitsUsed*/, SystemAddress /*remoteSystemAddress*/)
{ }

答案 1 :(得分:3)

您不必命名参数:

virtual void OnDirectSocketReceive(const char *, BitSize_t, SystemAddress) { }

答案 2 :(得分:1)

如果您使用警告级别4编译然后是,则这是正常的。您可以忽略该特定警告,执行您在示例中执行的操作或删除变量名称(我们只是将它们注释掉):

virtual void OnDirectSocketReceive(
      const char * /* data */,
      const BitSize_t /* bitsUsed */,
      SystemAddress /* remoteSystemAddress */)
{ }

答案 3 :(得分:0)

如果参数没有名称,编译器应该关闭:

virtual void OnDirectSocketReceive(const char *, const BitSize_t, SystemAddress)
{}

(但是你可能需要在文档中更仔细地解释这些论点。)

答案 4 :(得分:0)

还有另一种方法:你可以省略形式参数的名称:

virtual void OnDirectSocketReceive(const char *, const BitSize_t, SystemAddress ) {}

答案 5 :(得分:0)

我通过注释掉他们的名字来消除有关未使用参数的警告:

virtual void OnDirectSocketReceive(const char */*data*/, const BitSize_t /*bitsUsed*/, SystemAddress /*remoteSystemAddress*/)
{
}