当短路评估可能导致函数未被调用时,是不是有 gcc 警告标志?
Posted
技术标签:
【中文标题】当短路评估可能导致函数未被调用时,是不是有 gcc 警告标志?【英文标题】:Is there a gcc warning flag for when short-circuit evaluation may result in a function not being called?当短路评估可能导致函数未被调用时,是否有 gcc 警告标志? 【发布时间】:2019-09-22 19:00:29 【问题描述】:例如在代码中:
bool foo = bar || baz();
函数baz()
可能不会被调用。我发现这对我来说是一个常见的错误来源,我想知道 GCC 是否有办法打印警告。
【问题讨论】:
在某种意义上这就像要求获得if (condition) foo();
的警告,因为foo
可能不会被调用。我不希望收到警告
这样的警告会给你很多像if (ptr && ptr->foo())
这样的东西的误报...
这适用于lint
-like 或代码质量工具。
将顺序更改为bool foo = baz() || bar;
保证baz()
总是被调用。如果您已经知道这一点,那么我不知道您在问什么。
好吧,用一个|
写bool foo = bar | baz()
(按位或不是快捷方式)
【参考方案1】:
对此没有警告标志,它会针对太多常见情况(if(condition) bar();
、if(foo && foo->bar) baz();
等)生成警告。
相反,做类似这样的事情:
bool foo = baz() || bar;
或者这个:
bool foo = bar | baz();
这些无条件调用baz()
。
【讨论】:
以上是关于当短路评估可能导致函数未被调用时,是不是有 gcc 警告标志?的主要内容,如果未能解决你的问题,请参考以下文章