의심스러운 자르기에 관한이 린트 경고와 관련된 질문을 읽었지만 여기서는 순전히 C 경우입니다. pCont->sig
는보풀 경고 : # 647 : 의심스러운 자르기
pCont->sig -= (signed int64_t)((sub2 << 8)/pCont->freq + 1);
또한 64 비트 (유형 signed int64_t
)를 체결하고, 양 및 sub2
freq
32 비트 부호 같습니다 Warning #647
뜨면 여기서
다음 줄 것이다. 이 모든 것은 armcc로 컴파일됩니다.
이미 성공적으로 시도하지 않고 1
을 부호없는 32 비트로 캐스팅하려고 시도했지만 문제가 지속됩니다.
내가 시도 할 수있는 것에 대한 아이디어가 있습니까? 아니면 여기서 잘못된 점이 있습니까?
문제가 아니지만'int64_t'는 이미'signed'로 정의되어 있습니다. 사용시'signed'를 다시 지정할 필요가 없습니다. 예 : [이 고정 너비 정수 참조] (http://en.cppreference.com/w/c/types/integer). –
'((int64_t) sub2 << 8)/pCont-> freq + 1'이 필요한가요? –
스스로 대답해야 할 기본적인 질문 : "왜 음수가 될 수없는 경우 서명 된 유형을 사용하여 값을 저장하고 있습니까?" 그리고 표현식이 32 비트 이상의 유효 비트를 생성 할 수 없는데 왜 이것을 63 비트 값으로 저장합니까? " 그리고 "sub2가 너무 커서 값이 오버플로되면 어떻게됩니까?"에 대해 생각하지 않아도됩니다. 당신이 말할 수있을 때 "나는 그것을하기위한 것!"이라고 말할 수 있습니다. 경고를 억제 할 수 있습니까? –