문제

다음이있는 경우 :

/*
 * example.h
 */

#ifndef EXAMPLE
#define EXAMPLE

#include <stdio.h>

extern int parse_string(FILE *, char const*, const unsigned int);

#endif


이것은 사용하는 코드를 의미 할 것입니다 ... #include example.h ... 할 필요가 없습니다 ... #include example.h의존성? ( 즉: #include <stdio.h> )

도움이 되었습니까?

해결책

올바른 - 이것이 다른 헤더 내에 포함 된 필요한 헤더를 제한하는 것이 좋습니다. 사전 처리기는 "#include"지침을 stdio.h의 내용으로 바꾸므로 헤더는 컴파일러에 이와 같은 것을 보게됩니다.

/*
 * example.h
 */

#ifndef EXAMPLE
#define EXAMPLE

<contents of stdio.h>

extern int parse_string(FILE *, char const*, const unsigned int);

#endif

다른 팁

그러나 코드가 의존하는 경우 <stdio>, 아마도 포함해야합니다. (결국, <stdio> 여러 개의 포함 보호 기능도 있습니다.)

당신이 원하는 것이 마스터가 프로젝트에 포함된다면, 계속해서 가서 하나를 만드십시오. 그러나 실제 헤더와 공통 시스템 헤더를 모두 포함 시키지만 프로토 타입이나 선언 또는 매크로는 없습니다. 즉, 메가에 포함하지 않는 것 외에는 포함되지 않습니다. 이런 식으로 개별 모듈은 프로그램이 발전함에 따라 자체 결정을 내릴 수 있습니다.

예, 그렇게 할 수 있으며 원하는 효과가 있습니다.

당신의 특정 예를 위해 당신은 필요합니다 FILE 선언u003Cstdio.h> , 그것을 포함시키는 것이 좋습니다.

parse_string () 프로토 타입이 사용 된 경우 size_t 대신에 unsigned int 그리고 const char * (파일 이름의 경우) 대신 FILE *, 나는 포함한다u003Cstddef.h> "example.h"에서

#ifndef EXAMPLE
#define EXAMPLE
#include <stddef.h> /* size_t typedef */
extern int parse_string(const char *filename, char const*, const size_t);
#endif
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top