2016-05-23 83 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

相關問題