2011-12-15 24 views
0

我使用所謂的Parasoft的C++測試代碼質量的工具。據抱怨如下:質量錯誤傳遞的sizeof鑄造回報

setsockopt(...,sizeof(int)); 

它指出:

在 'setsockopt的' 函數調用,不傳長鑄造爲int表達爲 '5' 函數參數

我已經嘗試了幾種不同的選項來解決這個問題,但是它們都沒有效果。我可以做以下,並使它消失:

socklen_t socklength = sizeof(int); 
setsockopt(...,socklength); 

有沒有辦法來調用與setsockopt調用的sizeof(int)的直列不會產生這種質量的錯誤?

+0

有時候這樣的靜態分析儀咆哮不必要的。 – iammilind 2011-12-15 12:44:32

回答

1

轉換爲socklen_t?是這樣的:static_cast<socklen_t>(sizeof(int)),或者你可以忽略它...

+0

這是我嘗試的第一件事,但它沒有奏效。 – PatrickV 2011-12-15 13:01:57

+0

嗯,我很驚訝投並不能平息它,怎麼樣一個老C風格投?你也嘗試過嗎? – Nim 2011-12-15 13:12:10

0

一般來說,答案是無視該警告 - 它顯然是僞造的。此外,你不得不花費時間試圖解決針對系統頭文件產生的警告的事實表明有什麼錯誤。

您可以嘗試將sizeof()轉換爲socklen_t,但我希望您已擁有。另一個顯而易見的事情是構造一個int類型的表達式。也許是這樣的:

sizeof(int) & 0xFF. 

(當然,在把整數超過2^255位寬系統,這可能會失敗... :)