2012-06-21 2 views
1

하나의 리눅스 설치에서 다른 것으로 또는 유닉스에서 다른 유닉스로 이동할 때 종종 특정 코드를 포함하고 싶지 않은 것 같습니다.C++에서 헤더 포함에 대한 정적 분석

다른 사람에게 원본을 제공하면 파일을 컴파일 할 수있을 것으로 기대하고, 헤더 파일 누락으로 인해 실패 할 수 있습니다.

현재 암시 적으로 포함 된 것으로 보이는 부분에 명시 적으로 포함해야하는 헤더를 검색 할 수있는 정적 분석 도구가 있습니까? 헤더 파일의 암시 적 포함을 비활성화하는 방법이 있습니까?

또한 포함 된 헤더 파일을 감지하고 코드 변경을 통해 중복 될 수 있으므로 더 이상 필요하지 않습니다.

+0

나는 그런 도구가 없다는 것을 알고 있지만 [autoconf] (http://www.gnu.org/software/autoconf/)와 같은 것을 사용하면 응용 프로그램에서 사용할 수있는 헤더 파일을 쉽게 찾을 수 있습니다 위에 건설되고 있습니다. 그런 다음 한 시스템에서 누락 된 헤더 파일에 대한 "버그"를 수신 할 수 있으며 구성 스크립트에서 해당 헤더 파일에 대한 검사를 추가하고 소스에 조건부 포함을 추가하면 특정 헤더가 필요한 모든 플랫폼에서 작동합니다 파일. –

+0

또한 POSIX 함수의 경우 [공식 참조] (http://pubs.opengroup.org/onlinepubs/007904975/)에서 특정 기능에 필요한 헤더 파일을 확인할 수 있습니다. –

+0

"암시 적으로 포함 된"의미를 명확하게 설명해주십시오. #ifdef에있는 #include를 어떻게 처리 할 계획입니까? 가능한 모든 조건부 컴파일 키 조합에 대해 전체 포함 파일 목록을 원하십니까? 비슷한 분석의 예로 프로젝트에서 사용되는 모든 조건부 컴파일 키 목록을 작성하는 방법을 살펴볼 수 있습니다. http : //cdsan/Samp_CondParams.php –

답변

2

나는 약간의 성공과 함께 checkheaders을 사용했습니다. 작년에 개발 속도가 다소 느려진 것 같지만 여전히 유용합니다. 아마도 trunk 버전을 사용하는 것이 가장 좋습니다.

2

도움이 될 수있는 Include-What-You-Use이라는 Google 프로젝트가 있습니다. 그러나 여전히 제대로 수행하는 것은 매우 복잡합니다. 그리고 저는이 일을하는 다른 도구에 대해 알지 못합니다.

+0

clang-2.9보다 새로운 버전으로 빌드합니까? 나는 항상 그들이 그 버전 이후에 공을 좀 떨어 뜨린다고 생각했다. –