2012-01-18 2 views
6

최대 후속 조치 : g++ does not show a 'unused' warning.사용되지 않는 객체 찾기 (프리미티브가 아닌 값)

g ++이 이러한 변수에 대해 경고하지 않는 이유를 완전히 이해하고 있지만 어떻게 든 어쨌든 찾을 수 있기를 바랍니다. 내가 작업하고있는 코드에는 특별한 경우가 없기 때문에 하나의 FloatArray x;이 거의 남겨져 있습니다.

심지어 개별 클래스 (사용하지 않는 FloatArray 객체에 대한 경고)를 표시해야하는 경우 매우 유용합니다. 내가 무엇을 할 수 있을지?

+0

정말 문제가 있습니까? 아마 대부분의 컴파일러가 객체를 인라인으로 배치하고 사용하지 않을 것이기 때문에 상상하기 어렵습니다. 맞습니까? –

+0

그러나 컴파일러는 변수가 "최적화 전"으로 사용되지 않는다고 판단 할 때 이것을 경고합니다. 그것은 악몽 일 것입니다! – rodrigo

답변

1

글쎄, 기본적으로 GCC에 연결된 간단한 정적 분석 도구를 만들고 싶습니다. 그렇다면 MELT를 사용하여 사용되지 않는 가변 프린터를 신속하게 구현할 수 있습니다. 내가 질문에 뭔가 빠진하지만 GCC/G ++ 것은 당신이 원하는 어느 그렇게하지하는 경고를 지정할 수있는 옵션이있어 경우

http://gcc.gnu.org/wiki/MELT%20tutorial

+0

고마워요,하지만 "빨리"에 대해 잘 모르겠습니다. 나는 열거 된 전제 조건을 충족시키지 못한다. 나는 이미 멜트에서 이것을 한 사람을 찾을 수 있는지 알아볼 것입니다. –

-1

잘 모르겠어요. 그래서 그냥 -Wunused 변수를 사용했습니다.

자세한 내용은 여기를 참조하십시오 : -Wall가에 이것과 더 많은 유용한 경고를 켜집니다 또한

http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html.

+2

unused-variable 경고는 생성자/소멸자가 원하는 효과를 가질 수 있기 때문에 C++ 클래스가 아닌 프리미티브에서만 작동합니다. – greg

+1

죄송합니다. -1이 실제로 작동하지 않는 이유에 대해 정확히 설명하는 질문에 실제로 연결되어 있기 때문에 -1입니다. –

+0

정도면 충분합니다. 어느 날, 나는 배울 것입니다. – Liam

3

글쎄, GCC와 함께 다음 코드는 당신이 원하는대로 경고 않습니다

struct Foo 
{ 
}; 
struct Bar 
{ 
    Foo f; 
}; 
int main() 
{ 
    Bar b; //warning: unused variable 'b' 
} 

를하지만 푸 또는 바 구조체, 심지어 사소한 일에 생성자/소멸자를 추가하는 경우, 그것은 경고하지 않습니다. 지금은 사용되지 않는 여분의 변수를 확인하기 위해 g++ -DTEST_UNUSED 컴파일

struct Foo 
{ 
#ifndef TEST_UNUSED 
    Foo() {} 
#endif 
}; 
struct Bar 
{ 
    Foo f; 
}; 
int main() 
{ 
    Bar b; //warning! 
} 

:

struct Foo 
{ 
    Foo() {} 
}; 
struct Bar 
{ 
    Foo f; 
}; 
int main() 
{ 
    Bar b; //no warning! It calls Foo::Foo() into b.f 
} 

그래서 경고를 회복하는 가장 쉬운 방법은 모든 관련 생성자와 소멸자 조건부 컴파일하는 것입니다.

가장 좋은 아이디어는 아니지만 제대로 작동합니다.

+2

이것은 사용자가 만든 객체에서는 작동하지만 언어에서 제공하는 객체 (문자열, STL 컨테이너 등)에서는 작동하지 않을 수 있습니다. – greg

+0

이것은 아마도 프로젝트에서 사용되지 않는 많은 양의 객체를 찾을 수있게 해줄 것이므로 현상금을 갖도록하겠습니다. –

관련 문제