2012-06-19 4 views
0

내 프로그램의 각 파일에 stdlib.h을 포함하면 재 정의 오류가 발생하지 않습니다. 그래서 대답은 '예'입니다. 권리?표준 헤더/라이브러리에 가드가 포함되어 있습니까?

은 내가 libxml2 소스 코드를 읽고 있어요, 그리고 HTMLparser.c이 부분이 :

#include <string.h> 
#ifdef HAVE_CTYPE_H 
#include <ctype.h> 
#endif 
#ifdef HAVE_STDLIB_H 
#include <stdlib.h> 
#endif 

내 질문은 : 왜 여기 include guards를 사용은?

+1

'guard guards '는 다음과 같습니다. #ifndef XXX #define XXX #include # endif' – MYMNeo

+0

이 http://en.wikipedia.org/wiki/Include_guard를 참조하십시오. 필요 가드를 왜 필요로하는지 설명 할 것입니다. – MYMNeo

답변

4

가드는 포함되지 않습니다. 이러한 매크로는 시스템에 해당 헤더가있는 경우 설정됩니다. 구성 중에 감지되었습니다. 무조건적으로 포함되어 있고 존재하지 않으면 컴파일이 실패합니다.

3

예, 시스템 헤더에 가드가 있습니다. 예를 들어보세요. "string.h"에서 :

/* Excerpt from GCC string.h */ 
/* 
* ISO C99 Standard: 7.21 String handling <string.h> 
*/ 

#ifndef _STRING_H 
#define _STRING_H 1 

를 정의

HAVE_CTYPE_H 
HAVE_STDLIB_H 

에 대한 보통 헤더 파일의 가용성을 확인하는 ./configure 스크립트를 생성 할 수있는 설정 헤더에서 왔습니다.