有时,局部变量仅用于在 assert() 中检查它,就像这样 -
int Result = Func();
assert( Result == 1 );
在 Release 构建中编译代码时,assert()s 通常被禁用,因此此代码可能会产生关于 Result 已设置但从未读取的警告。
一个可能的解决方法是 -
int Result = Func();
if ( Result == 1 )
{
assert( 0 );
}
但是它需要太多的输入,看起来并不容易,并且会导致总是检查条件(是的,编译器可能会优化检查,但仍然如此)。
我正在寻找一种替代方式来表达这个assert(),这种方式不会引起警告,但仍然易于使用并避免改变assert() 的语义。
(在此代码区域中使用#pragma 禁用警告不是一种选择,降低警告级别以使其消失也不是一种选择……)。
原文由 Hexagon 发布,翻译遵循 CC BY-SA 4.0 许可协议
我们使用宏来明确指示何时未使用某些内容:
然后在您的示例中,您将拥有:
这样(a)生产构建成功,并且(b)在代码中很明显该变量是 设计 未使用的,而不是只是被遗忘了。这在不使用函数的参数时特别有用。