Linux에서 64 비트 레거시 응용 프로그램을 이식하는 중입니다. long과 int가 같은 의미로 사용되는 곳이 많이 있으며, 소스 코드가 상당히 크면 테스트를 통해 모든 것을 잡기가 어렵습니다. 정적으로 코드를 분석하고 안전하지 않은 코드를 수정하기 위해 플러그인을 사용할 계획입니다. 하나 개는 이러한 패턴은안전하지 않은 캐스트를 판별하는 경고
void foo(unsigned long *x){
*x = *x + 1; //x is pointing to a 32-bit space
return;
}
int main(){
unsigned int x = ;
foo(reinterpret_cast<unsigned long*>(&x));
}
우리는 우리의 응용 프로그램을 구축하는 GCC-4.2.1를 사용합니다. 그리고 WALL과 -Wextra를 사용할 때조차도 이러한 유형의 캐스트에 대해 경고하지 않습니다.
나는 맹목적으로 달리기를 시도했지만 성공하지 못했습니다. clang에 위험한 명시 적 캐스트에 대해 경고하는 플래그가 있습니까? 그렇지 않다면 어떻게 추가하나요?
감사 디트 마르에 대해 당신에게 오류의 무리를 줄 것이다! 나는 참석할 수 있으면 좋겠지 만 나는 가까이에 있지 않습니다. 이 예제를 살펴보고 규칙을 추가하려고합니다. –
나는 gcc -Dreinterpret_cast = static_cast myfile.cpp와 같은 것을 시도했다. 그리고 이것은 내가 필요한 오류들을 던지기 시작했다. 나는 이것이 너무 강하게 작용할 것이라고 확신한다. 나는 그 규칙을 추가 할 것이다. –