当短路评估可能导致函数未被调用时,是不是有 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 警告标志?的主要内容,如果未能解决你的问题,请参考以下文章

短路评估和副作用[重复]

如何防止短路评估?

当运算符优先级说不应该时,为啥短路评估会起作用?

当重载具有多重继承的函数时,GCC称调用它是不明确的,但Clang和MSVC不这样做

XPath 是不是对逻辑表达式进行短路评估?

JavaScript 短路评估错误?