매크로를 HAVE_SYS_SELECT_H로 정의하면 헤더 파일이 포함됩니다. 매크로가 어디에 있는지 알아야합니까? 이것은 헤더 파일이 정의 된 매크로입니다.컴파일 시간에 헤더 파일을 찾는 방법
소스 코드를 컴파일하는 동안 옵션이 있습니까?
헤더 파일을 찾는 방법이 있습니까? 또한 귀하의 질문 제목에서
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
매크로를 HAVE_SYS_SELECT_H로 정의하면 헤더 파일이 포함됩니다. 매크로가 어디에 있는지 알아야합니까? 이것은 헤더 파일이 정의 된 매크로입니다.컴파일 시간에 헤더 파일을 찾는 방법
소스 코드를 컴파일하는 동안 옵션이 있습니까?
헤더 파일을 찾는 방법이 있습니까? 또한 귀하의 질문 제목에서
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
를 컴파일하는 동안 나는 유일한 대답은 컴파일러 나 자세한 정보 컴파일 (-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?
이게 도움이 되길 바란다.
#warning은 매크로가 정의되어 있는지 확인하는 데 사용됩니다. 함수에서 printf를 사용하여 활성화 여부를 확인할 수 있습니다. 그러나 헤더의 일부 매크로는 printf를 사용할 수 없습니다. #warning을 사용할 수 있습니다. 그렇지 않으면 #error를 사용할 수 있습니다.
#ifdef HAVE_SYS_SELECT_H
#warning "defined"
#include <sys/select.h>
#endif
ctags를 사용할 수 있습니다. – Haris
이것은 아마도 약간의 경우를 제외하고는 실제 답변이 아닙니다 : 대부분의'HAVE_XXX'는 자동 구성에 의해 자동 생성 된'config.h'에서옵니다. – unwind
프로젝트 폴더의 모든 헤더 파일을 검색합니다. 대부분 자동 생성 된 헤더 파일에 들어 있는데, 이는 헤더 파일이 아직 존재하지 않을 수 있음을 의미하며, 매크로가있는 헤더 파일은'configure' 스크립트 (또는 이와 유사한 것)에 의해 생성됩니다. –