2016-06-17 2 views
1

매크로를 HAVE_SYS_SELECT_H로 정의하면 헤더 파일이 포함됩니다. 매크로가 어디에 있는지 알아야합니까? 이것은 헤더 파일이 정의 된 매크로입니다.컴파일 시간에 헤더 파일을 찾는 방법

소스 코드를 컴파일하는 동안 옵션이 있습니까?

헤더 파일을 찾는 방법이 있습니까? 또한 귀하의 질문 제목에서

#ifdef HAVE_SYS_SELECT_H 
    #include <sys/select.h> 
#endif 
+0

ctags를 사용할 수 있습니다. – Haris

+0

이것은 아마도 약간의 경우를 제외하고는 실제 답변이 아닙니다 : 대부분의'HAVE_XXX'는 자동 구성에 의해 자동 생성 된'config.h'에서옵니다. – unwind

+0

프로젝트 폴더의 모든 헤더 파일을 검색합니다. 대부분 자동 생성 된 헤더 파일에 들어 있는데, 이는 헤더 파일이 아직 존재하지 않을 수 있음을 의미하며, 매크로가있는 헤더 파일은'configure' 스크립트 (또는 이와 유사한 것)에 의해 생성됩니다. –

답변

1

를 컴파일하는 동안 나는 유일한 대답은 컴파일러 나 자세한 정보 컴파일 (-v 사용)이며,이 컴파일러에 의존하는 매크로가 정의할지 여부를 알고 싶어하고 당신을 읽을 필요 컴파일러 설명서.
하지만 컴파일하기 전에, 이 샘플 코드를 고려하는 데 도움이 밖으로 정적 코드 분석 도구가 있습니다 :
"mac.h"파일 :

#define TEST 1 
#define TEST_FILE __FILE__ 

"mac.c"파일 :

#include <stdio.h> 
#include <limits.h> 
#include <stdint.h> 

#include "mac.h" 
#define DEBUG 1 

int main() 
{ 
#ifdef DEBUG 
    printf("%s",TEST_FILE); // C:\tmp\mac.c 
#endif 
} 

전 처리기는 C로 include 지시문을 제거하므로이 샘플 코드의 출력은 "mac.c"파일 (예 : "C : \ tmp \ mac.c")의 경로입니다.
그래서 나는 귀하의 질문에 대한 하나의 해결책이 있다고 생각 :
http://clang-analyzer.llvm.org/

및 참조 : 같은 편집기 정적 코드 분석 기능이나 도구를 사용하여

How can I quickly search all included header files in a project for a specific function or macro?
How to quickly identify functions from header files?
How expensive it is for the compiler to process an include-guarded header?

이게 도움이 되길 바란다.

0

#warning은 매크로가 정의되어 있는지 확인하는 데 사용됩니다. 함수에서 printf를 사용하여 활성화 여부를 확인할 수 있습니다. 그러나 헤더의 일부 매크로는 printf를 사용할 수 없습니다. #warning을 사용할 수 있습니다. 그렇지 않으면 #error를 사용할 수 있습니다.

 #ifdef HAVE_SYS_SELECT_H 
    #warning "defined" 
     #include <sys/select.h> 
    #endif 
관련 문제