质量错误传递sizeof铸造返回

时间:2011-12-15 12:39:57

标签: c++ casting parasoft

我正在使用名为Parasoft C ++ Test的代码质量工具。它抱怨以下内容:

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

它声明:

  

在'setsockopt'函数调用中,不要将long转换为int表达式作为'5'函数参数

我已经尝试了几种不同的转换选项来解决这个问题,但它们似乎都没有任何效果。我可以做以下事情并让它消失:

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

是否可以通过setsockopt调用内联调用sizeof(int)而不会产生此质量错误?

2 个答案:

答案 0 :(得分:1)

投放到socklen_t?类似于:static_cast<socklen_t>(sizeof(int)),或者你可以忽略它......

答案 1 :(得分:0)

一般来说,答案是忽略这个警告 - 这显然是假的。此外,您必须花时间尝试修复针对系统头文件生成的警告这一事实表明存在问题。

您可以尝试将sizeof()转换为socklen_t,但我希望您已经拥有。另一个有点明显的事情是构造一个int类型的表达式。也许是这样的事情:

sizeof( int ) & 0xFF.

(当然,在整数超过2 ^ 255位宽的系统上,这可能会失败......:)