0

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

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

它指出:

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

我尝试了几种不同的铸造选项来解决这个问题,但它们似乎都没有任何效果。我可以执行以下操作并使其消失:

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

有没有办法在 setsockopt 调用中内联调用 sizeof(int) 而不会产生此质量错误?

4

2 回答 2

1

投射到socklen_t? 像:static_cast<socklen_t>(sizeof(int)),或者你可以忽略它......

于 2011-12-15T12:45:38.273 回答
0

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

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

sizeof( int ) & 0xFF.

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

于 2011-12-15T12:48:31.617 回答