2010-05-14 4 views
59

# C 프로그램 중 하나에서 #include 할 수있는 헤더 파일에 함수 컬렉션을 만들 수 있기를 원합니다.어떻게 C 헤더 파일을 만들 수 있습니까?

+43

텍스트 편집기가 있습니까? – stefanB

+12

제대로 따라갈 경우, 표준 C 라이브러리와 비슷한 라이브러리를 작성하여 함수 정의가있는 헤더 파일을 포함시킨 다음 최종 실행 파일을 빌드 할 때 해당 라이브러리에 링크하십시오. 그게 맞습니까? –

+0

네, 맞습니다. – user340838

답변

133
  1. 가 DONE

에 함수 프로토 타입을 넣어 whatever.h라는 이름의 새 파일을 만듭니다 좋아하는 텍스트 편집기를 엽니 다.

#ifndef WHATEVER_H_INCLUDED 
#define WHATEVER_H_INCLUDED 
int f(int a); 
#endif 

참고 whatever.h 예 : 가드 (전 처리기 명령)을 포함 루크 감사는 덧붙였다. 동일한 컴파일에서 동일한 헤더 파일을 두 번 포함하지 않습니다. 또 다른 가능성 (덧글에 언급)은 #pragma once을 추가하는 것이지만 모든 컴파일러에서 지원된다는 보장은 없습니다.

예 whatever.c

#include "whatever.h" 

int f(int a) { return a + 1; } 

그리고 당신이 다른 .c 인 파일에 "whatever.h"를 포함하고 whatever.c의 오브젝트 파일을 링크 할 수 있습니다. 이처럼

:

을 sample.c (당신은 GCC를 사용하는 경우)

#include "whatever.h" 

int main(int argc, char **argv) 
{ 
    printf("%d\n", f(2)); /* prints 3 */ 
    return 0; 
} 

는 컴파일하려면 다음

$ gcc -c whatever.c -o whatever.o 
$ gcc -c sample.c -o sample.o 

은 실행 파일을 생성 할 파일을 링크 :

$ gcc sample.o whatever.o -o sample 

테스트 할 수 있습니다. 샘플 :

$ ./sample 
3 
$ 
+7

헤더 가드에 대해 언급하고 싶을 수도 있습니다. – luke

+0

@luke : 감사합니다. 헤더 가드가 무엇인지 전혀 모릅니다. 이제 Google로 간다. 다시 한번 감사드립니다. –

+0

@luke : 오! 내가 참조. 좋은 지적. 그들을 추가하려고합니다. –

2

헤더 파일은 컴파일 전에 사전 프로세서에서 컴파일 단위로 주입되므로 유효한 C 코드를 포함 할 수 있습니다.

헤더 파일에 함수가 포함되어 있고 여러 개의 .c 파일에 포함되어있는 경우 각 .c 파일에 해당 함수의 복사본이 만들어지고 심볼이 만들어집니다. 링커는 중복 된 심볼에 대해 불평 할 것입니다.

여러 개의 .c 파일에 포함하기 위해 헤더 파일에 static 함수를 생성하는 것이 기술적으로 가능합니다. 코드가 .c에있는 규약에서 파손 되었기 때문에 이것은 일반적으로 수행되지 않지만 파일과 선언은 .h 파일에 있습니다.

자세한 설명은 C/C++: Static function in header file, what does it mean?의 토론을 참조하십시오.

관련 문제