2011-12-15 2 views
0

나는 Parasoft C++ Test라는 코드 품질 도구를 사용하고 있습니다. 그것은 다음에 대해 불평 :품질 오류 캐스팅 된 크기 반환

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

그것은 상태 :

'setsockopt를'함수 호출에서

는 오랫동안 '5'함수 인수로 식을 int로 캐스트 통과하지

이 문제를 해결하기 위해 여러 가지 전송 옵션을 시도했지만 그 중 아무 것도 효과가없는 것 같습니다. 나는 다음을 수행하고 멀리 갈 수 있도록 할 수 있습니다

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

이 품질 오류를 생성하지 않고 setsockopt를 호출로는 sizeof (int)를 인라인을 호출하는 방법이 있나요를?

+0

때로는 정적 분석기는 불필요하게 호언 장담. – iammilind

답변

1

socklen_t으로 전송 하시겠습니까? static_cast<socklen_t>(sizeof(int))과 같거나 무시하면됩니다.

+0

그것이 제가 시도한 첫 번째 시도 였지만 작동하지 않았습니다. – PatrickV

+0

흠, 나는 캐스트가 그것을 침묵하지 않았다는 것에 놀랐다. 옛날 스타일의 캐스팅은 어때? 너도 그걸 시도 했니? – Nim

+0

한 가지 더 - 아마도'int (sizeof (int))'? 나는이 도구가 없으므로 침묵 할 것만을 짐작할 수 있습니다 .. – Nim

0

일반적으로 대답은이 경고를 무시하는 것입니다. 이는 분명히 가짜입니다. 또한 시스템 헤더 파일에 대해 생성 된 경고를 수정하는 데 시간을 소비해야한다는 사실은 잘못된 점을 나타냅니다.

sizeof()를 socklen_t로 캐스팅 해 볼 수도 있지만, 이미 갖고 계신 것으로 기대됩니다. 다른 다소 명백한 것은 int 타입의 표현식을 만드는 것입니다. 아마도 뭔가 같은 :

sizeof(int) & 0xFF. 

(물론, 정수 폭보다 2^255 비트있는 시스템이 실패 할 수 있습니다 ... :)

+0

나는 비 - 라이닝으로 도망 갈 수 있습니다. 나는 당신이 올린 것을 시도했으나 오류가 사라지지 않았다. – PatrickV

+0

그건 도움이되지 않습니다; 'sizeof (int)'타입이'long' 인 경우'sizeof (int) & 0xFF'도 마찬가지입니다. –

+0

해결되지 않으면이 품질 오류를 억제해야합니다. – MichaelMocko