문제

일부 오래된 코드를 리팩토링하는 동안 특정 헤더 파일이 .cpp 파일에서 제거된 지 오래 된 함수에 대한 함수 선언으로 가득 차 있다는 것을 깨달았습니다.이러한 항목을 자동으로 찾아서 제거할 수 있는 도구를 아는 사람이 있나요?

도움이 되었습니까?

해결책

가능하다면 test.cpp 파일을 만들어 모두 호출할 수 있습니다. 링커는 코드가 없는 파일을 해결되지 않은 것으로 표시합니다. 이렇게 하면 테스트 코드는 컴파일만 하면 되고 실제로 실행되는 것에 대해서는 걱정하지 않아도 됩니다.

다른 팁

PC-lint는 전용 목적으로 조정할 수 있습니다.

귀하의 질문에 대해 다음 코드를 테스트했습니다.

void foo(int );

int main()
{
    return 0;
}
lint.bat test_unused.cpp

다음과 같은 결과를 얻었습니다.

============================================================

--- Module:   test_unused.cpp (C++)

    --- Wrap-up for Module: test_unused.cpp

Info 752: local declarator 'foo(int)' (line 2, file test_unused.cpp) not referenced
test_unused.cpp(2) : Info 830: Location cited in prior message

============================================================

따라서 목적에 맞게 경고 번호 752를 전달할 수 있습니다.

lint.bat  -"e*"  +e752  test_unused.cpp

-e"*"는 모든 경고를 제거하고 +e752는 이 특정 경고를 켭니다.

Doxygen을 사용하여 코드를 색인화하면 각 함수가 참조되는 위치를 확인할 수 있습니다.그러나 각 클래스(클래스당 HTML 페이지 1개)를 탐색하고 이를 가리키는 항목이 없는 클래스를 검색해야 합니다.

또는 ctags를 사용하여 코드의 모든 함수 목록을 생성한 다음 objdump 또는 유사한 도구를 사용하여 .o 파일의 모든 함수 목록을 가져온 다음 해당 목록을 비교할 수 있습니다.그러나 이름 변경으로 인해 문제가 발생할 수 있습니다.

실제 소스 트리에 본문이 없는 일부 함수가 일부 외부 라이브러리에 정의되어 있을 수 있기 때문에 그런 것은 없다고 생각합니다.이는 헤더에 선언된 함수 목록을 만들고 해당 함수가 때때로 호출되는지 확인하는 스크립트를 생성해야만 수행할 수 있습니다.

나는 vim용 C++ ftplugin 그것은 비교할 수 없는 기능을 확인하고 보고하는 것입니다. vimmer 여러분, ftplugin 제품군은 아직 설치가 간단하지 않습니다.ftplugin은 ctags 결과를 기반으로 합니다(따라서 경험적 다른 환경에 쉽게 적응할 수 있음) 인라인 함수의 경우 거짓양성이 발생하는 경우도 있습니다.

HTH,

또한 Doxygen(@Milan Babuskov)을 통해 컴파일러에 이에 대한 경고가 있는지 확인할 수 있습니다.예:gcc에는 정적 함수에 대한 -Wunused-function이 있습니다.-fdump-ipa-cgraph.

좋은 얘기를 들었어 PC-Lint, 하지만 아마도 귀하의 요구에 비해 과잉일 것이라고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top