语句“(void)startGuardBegin;”有什么作用
What does the statement “(void)startGuardBegin;” do?
可能的重复项:
"(无效)新"在C++中是什么意思?
我不熟悉C++,也不明白方法签名后面的行:
int EAN13Reader::decodeMiddle(Ref<BitArray> row,
int startGuardBegin,
int startGuardEnd,
std::string& resultString)
{
(void)startGuardBegin;
...
}
什么是(void)startGuardBegin;
?方法调用?
它告诉编译器参数未使用,因此不应显示"未使用的参数"警告。
虽然像GCC这样的编译器通常有其他方式(int startGuardBegin __attribute__ ((unused))
)来指示这一点,通常是在函数头中,将其转换为(void)
并不依赖于任何编译器特定的功能。
它什么都不做。
相反,它向读取器和任何静态分析工具指定函数中未使用startGuardBegin
,并且这是正常的和预期的。
如果函数中未使用参数,静态分析工具将发出警告,因为这表示可能存在错误。 如果无法从签名中删除参数(如果在调试代码中使用参数,或者兼容性或将来的行为需要该参数),则在 no-effect 语句中使用该参数将阻止警告。 但是,仅在语句startGuardBegin;
中使用它就会触发另一个警告(因为该值被丢弃),因此将其转换为 void
可以防止这种情况。
强制转换为 void
用于禁止对未使用的变量和未保存的返回值或表达式发出编译器警告。
标准(2003)在§5.2.9/4中说:
任何表达式都可以显式转换为类型"cv void"。表达式值将被丢弃。
所以你可以写(以C++风格的方式):
//suppressing unused variable warnings
static_cast<void>(unusedVar);
//suppressing return value warnings
static_cast<void>(fn());
//suppressing unsaved expressions
static_cast<void>(a + b * 10);
static_cast<void>( x &&y || z);
static_cast<void>( m | n + fn());
所有表格均有效。我通常将其缩短为:
//suppressing expressions
(void)(unusedVar);
(void)(fn());
(void)(x &&y || z);
也没关系。
相关文章:
- archive_read_support_filter_all() 有什么作用?
- 当我们为(;;) 写作时,它做了什么?for 循环中的双分号有什么作用?
- 这个递归函数有什么作用?运行时的复杂性是多少?
- DrawShadow 中的 Elevation 究竟有什么作用?
- 测试"stream >> char"有什么作用?
- "uFlags &= ~CHN_PANNING"命令有什么作用?
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- int** a = new int*[n]();这个函数有什么作用?
- C++ 此函数调用之前的(void)有什么作用?
- i+=(i&-i) 有什么作用?它是便携式的吗?
- 这个size_t在 lambda 中有什么作用?C++代码
- 数组下标运算符 ([ ]) 对数组有什么作用?
- 结构之外的节点 * head 有什么作用?
- 重载括号运算符有什么作用?
- clang的"-Ofast"选项在实践中有什么作用,特别是对于与gcc的任何差异?
- std::make_unique_for_overwrite() 对 std::make_unique() 有什么作用?
- 运算符 delete[] 有什么作用?
- 下面的代码有什么作用?c++
- 这个陈述'p = I.ptr<uchar>(i);有什么作用?
- 这个嵌套的名称空间定义有什么作用