2012-11-22 3 views
4

C++ 헤더가 포함 된 위치를 프로그래밍 방식으로 검색 (및 인쇄) 할 수 있습니까? 당신이 볼 수 있듯이 컴파일러가 MSVC입니다헤더가 포함 된 위치를 감지하는 방법

// DeprecatedHeader.h 
__pragma(message ("DeprecatedHeader.h is deprecated - include NewHeader.h instead.")) 
#include "NewHeader.h" 

,하지만 난 포장하는 매크로를 가지고 :

내가 좋아하는 헤더를 가지고있다. GCC는 환영합니다. 그러나 가능하지 않다면 Windows에서 '트릭'을 활성화 할 것입니다.

는하지만 내가 무엇을 찾고있어

"AnyOtherFile.cpp was including DeprecatedHeader.h, please include NewHeader.h instead." 

편집과 같은 출력은 : 내가 원하는 이유를 명확하게하기 위해이 : 다음은 컴파일러가 이미 많이 도움이되어 발생 경고 : 코드가 깨진하지만 넘나들며되지 사람들이 포함을 변경합니다. 문제 : 다른 헤더를 통해이 머리글을 가져올 수 있으므로 잘못된 '녀석'을 비난 할 수 있습니다. 내 목표는 컴파일 단위가 아니라 잘못된 헤더를 비난하는 것이 었습니다.

+0

이 작업을 수행하는 것이 가능하지 않을까요 귀하의 코드베이스를 통해 간단한 텍스트 검색? – Philipp

+0

메이크 파일 이전에 스크립트를 실행하는 것이 가장 쉬운 방법이다. – enjoylife

+2

한 단어 :/showincludes. http://msdn.microsoft.com/en-us/library/hdkef6tk.aspx – avakar

답변

1

비록이 기능을 추구할만한 가치가 있다고 생각하지 않지만 여기 해결책이 있습니다. 각 헤더 파일의 상단에

이되지 않는 헤더를 확인 후 다른 파일을 포함하기 전에,이를 넣어 :

#undef INCLUDING_FILE 
#define INCLUDING_FILE "file_name.h" 

이 각 .h 파일이 쓰기 간단한 bash는 스크립트를 사용하여 수행 할 수 있습니다, 문자열에 파일 이름을 포함하여.

그래서 헤더 (GCC와)과 같을 것이다 :

일반 헤더 :

#undef INCLUDING_FILE 
#define INCLUDING_FILE "normal.h" 

#include "deprecated.h" 

되지 않는 헤더 :

#ifdef INCLUDING_FILE 
# pragma message "Internal bug: " INCLUDING_FILE " included " __FILE__ " which is deprecated" 
#else 
# pragma message "Note: you shouldn't included " __FILE__ " which is deprecated" 
#endif 

#undef INCLUDING_FILE 
#define INCLUDING_FILE "normal.h" 

#include "others.h" 
+0

고마워, 나는 이것에 대해서도 생각했다. 그러나 이것은 너무 많은 노력으로 들린다. 나는 그것이 지금과 같은 경고가 실현 가능한 최대라고 생각한다. 어쨌든 해결책을 가져 주셔서 감사합니다! – Borph

+0

@borph, 나는 또한 이것이 매우 비 통상적 인 언급은 말할 것도없고, 번거 로움의 가치가 없다고 생각합니다. 자신의 질문에 도움이되거나 도움이되는 게시물을 upvote/accept하는 것을 잊지 마십시오. – Shahbaz

+0

나는 시도했다. 그러나 그것은 "투표 업은 15 평판을 요구한다" – Borph

2

전 컴파일 된 소스 코드를 생성하는 옵션을 사용하여 컴파일러를 실행할 수 있습니다 (gcc -E, CL.EXE /E 또는 무엇이든). 결과 코드에는 코드의 각 스 니펫이 나오는 위치의 태그가 포함됩니다.

+0

내가 원하는 것은 정확하지 않습니다 - 질문의 주석을보십시오.사전 빌드 스크립트를 고려하기 전에 경고를 이미 "크게"있지만 잘못된 사람들을 비난 할 수 있습니다. – Borph

0

정확한 해결책이 확실하지 않습니다 (__FILE__ 및 기타 유사한 매크로로 가능할 수 있습니다). #warning 전처리 지시문을 잘못된 헤더 파일에 삽입 해보십시오. 편집하는 동안 경고를 발행하여 원하는 것을 알려줍니다.

+0

__FILE__은 현재 파일을 참조합니다. "이전 파일"을 참조하는 것이 좋겠 으면합니다. 경고는 내가하는 일과 똑같습니다. – Borph

관련 문제