【问题标题】:What does "(void)pointer;" mean in c++?"(void)pointer;" 是什么意思?在 C++ 中是什么意思?
【发布时间】:2013-03-09 19:40:39
【问题描述】:

有一些c++代码

struct data {
    /* some fields */
};

typedef struct data * pData;

int function(pData pointer) {
    if(pointer == NULL)
        return ERROR;
    (void)pointer;
    /* other work */
}

“(void)pointer”是什么意思?

仅供参考,有一些 int/char*/etc,一些函数指针用作结构中的回调函数。

【问题讨论】:

  • 在这种情况下绝对没有。
  • 可能是在未使用 pointer 时遗留下来的,从而导致警告。另一种方法是省略参数名称。

标签: c++ pointers


【解决方案1】:

它用于规避未使用的变量警告。

如果您确实使用了该变量,则它是无操作的。

大多数未使用的变量是参数,它们是实现回调函数签名所必需的,但在您的实际实现中不需要。

参照

更新:

只是因为没有另外提及:变量的类型可能是任何东西。它不限于指针类型。

【讨论】:

  • 我相信如果你不使用它可以完全省略参数的名称。但是,例如,当在 Debug 和 Release 配置之间使用不同的变量/参数集时,它可能会很有趣。
  • @MatthieuM。我不喜欢省略名字。一方面它看起来是错误的(因为它在 C99 中是错误的)。在某一时刻,您可能会使用此参数,然后必须查找签名。其他维护者(或几周后的您)可能会查看代码,并且对某些 intbool 的含义感到困惑。所以,我更喜欢(void)var。 :-)
【解决方案2】:

这是抑制未使用变量编译器警告的典型方法。

但是,由于指针实际上用作if(pointer == NULL),我认为没有理由这样做。

如果非要猜的话,我猜NULL检查和返回是在警告抑制之后添加的。

【讨论】:

    【解决方案3】:

    它将指针值转换为“无类型”值,或者它“没有类型”。

    void foo(); // absent of a return value 
    int bar(void); // absent of parameters
    void *var; // Type of the variable pointed to is absent
    (void) var; // The type of the variable is absent
    

    【讨论】:

      【解决方案4】:

      这并不意味着很多。

      它计算表达式 pointer,然后通过将其转换为 void 来明确忽略它。

      有时您在试图说服编译器警告未使用的参数时会看到此构造,但在您的代码中,该参数已被使用,因为它正在被NULL-checked。

      【讨论】:

        猜你喜欢
        • 2020-05-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-11
        • 2019-12-08
        • 1970-01-01
        • 2018-07-03
        • 1970-01-01
        • 2015-01-26
        相关资源
        最近更新 更多