`(void)d`的用法是什么?

时间:2011-12-13 16:56:17

标签: c++

  

可能重复:
  What is the purpose of the statement “(void)c;”?

class ArgString : public Arg::Base
{
public:
    ...
    bool CanConvertToInt() const
    {
        const char *cstr = mValue.c_str();
        char *result = 0;
        long d = strtol(cstr, &result, 10);
        (void) d; // what is the usage of this line?
        return result != cstr;
    }

private:
    std::string mValue;
};

有人能告诉我下一行的目的是什么吗?

(void) d;

谢谢

//更新//

有些人指出,该行的目的是抑制编译警告。对我来说,这很奇怪。因为这是一个非常严重的警告

    warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use
_CRT_SECURE_NO_WARNINGS. See online help for details.

为什么我们忽略这个大警告,只处理较小的警告。

3 个答案:

答案 0 :(得分:4)

模式(void)d通常用于告诉代码分析器您明确忽略函数的返回值。许多C分析器认为忽略返回值是错误的,因为它可能导致忽略失败。这是一种说“我打算这样做”的方式

答案 1 :(得分:3)

我唯一一次看到这样的事情是为了防止对未使用的变量发出警告。将某些内容转换为(void)绝对没有任何意义,但它会被视为变量的用法。

答案 2 :(得分:1)

它避免了未使用的变量警告。我已经看到这用于断言宏,因此在发布时你不会得到未使用的变量警告。它评估为无操作。