2016-05-23 79 views
1

我刚才在一些示例代码中遇到了这个问题,我以前从未见过它。对于返回类型但不使用返回值的内联函数,作者在调用前加上(void)。这实际上是否做任何事情?为什么void以这种方式使用内联函数?

例子:

inline some_object& SomeClass::doSomething(); 

SomeClass o; 

(void)o.doSomething(); 
+1

要压制源代码分析器的警告,调用者忽略返回结果。 – WhozCraig

+0

禁止关于忽略函数的返回值的编译器警告。 –

+0

通过转换为'void',它可能不会在某些编译器设置为严格的警告级别时产生未使用的值警告。所以也许它是为了得到干净的编译。同样,如果你有一个带有未使用参数的函数(为了匹配一个签名,例如QT信号),你可以在函数内部将参数强制转换为void,并且仍然有一个没有任何警告的'clean'编译。 – infixed

回答

3

使用像Lint一个工具,它已经被配置,如果你调用一个函数然后忽略其返回值时发出警告时,通常这样做。

+0

请注意,它不仅仅是类似于皮棉的工具,它会发出这样的警告,编译器还可以检测到被忽略的函数结果和/或参数,要求将其转换为“void”来清除警告。 – cmaster

1

这是(IMO)一种可怕的做法,它被一些工具鼓励,它们给出了关于调用函数和忽略返回函数的警告。

解决此问题的正确方法是为工具提供可合理忽略返回值的函数列表。如果该工具不支持该功能,则可能无用,应该扔掉。在编译器的情况下,您可能无法自行丢弃该工具,并且可能不得不在全局禁用该警告时解决。


1.最常见的类似lint,但一些编译器可以做同样的。

+0

我对Sean的回答的评论也适用于您的回答:编译器也可能会检测到这一点。 – cmaster

+0

@cmaster:一个编译器很容易发出无意义的警告*是一个lint(也可能产生代码)。 –

+0

我分享你的厌恶这样的chatty工具,需要额外的合法代码怪癖闭嘴。然而,像'gcc'这样的编译器(我知道可以发布这些警告)通常不被认为是linting工具。你不能停止使用编译器,你可以关掉违规警告。因此,它会增加您的答案的可理解性,从而在编译器上添加评论。 – cmaster

相关问题