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.
为什么我们忽略这个大警告,只处理较小的警告。
答案 0 :(得分:4)
模式(void)d
通常用于告诉代码分析器您明确忽略函数的返回值。许多C分析器认为忽略返回值是错误的,因为它可能导致忽略失败。这是一种说“我打算这样做”的方式
答案 1 :(得分:3)
我唯一一次看到这样的事情是为了防止对未使用的变量发出警告。将某些内容转换为(void)
绝对没有任何意义,但它会被视为变量的用法。
答案 2 :(得分:1)
它避免了未使用的变量警告。我已经看到这用于断言宏,因此在发布时你不会得到未使用的变量警告。它评估为无操作。