헤더 파일: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
편집 요약 없음
편집 요약 없음
1번째 줄:
[[컴퓨터 프로그래밍]]에서, 특히 [[C (프로그래밍 언어)|C]]와 [[C++]] 프로그래밍 언어에서, '''헤더 파일'''(header file) 또는 '''인클루드 파일'''(include file)은 [[컴파일러]]에 의해 다른 소스 파일에 자동으로 포함된 [[소스 코드]]의 [[컴퓨터 파일|파일]]이다. 일반적으로 헤더 파일들은 다른 소스 파일 속의 첫 부분에 포함된다.
 
C와 C++ 프로그래밍 언어에서, [[표준 라이브러리]] 함수는 전통적으로 헤더 파일 안에서 선언되어 있다. [[C 표준 라이브러리]]와 [[C++ 표준 라이브러리]]에 들어가서많은 함수들이 예를존재한다. 보라함수들은 사용자가 API 수준에서 알아야 한다. 따라서 개발 도구를 만드는 입장에서, 함수 자체를 설계하고 코딩을 한 측에서 제공해야 한다. 라이브러리 오브젝트 코드는 파일로 존재하고 헤더 파일에 함수나 변수의 형이 선언되어 있으므로 사용자 측에서 붙여 사용하면 된다. 사용자 측에서 사용한 라이브러리는 라이브러리 파일의 코드를 [[링커]]가 응용 프로그램에 붙여 전체 실행 코드가 완성된다. 결국 헤더 파일의 형을 사용하여 라이브러리 사용자의 인클루드에 의해 함수 호출이 방식이 결정된다.
 
 
== C/C++ 헤더 파일 사용 예 ==
 
대표적으로 C언에서 많이 사용하는 printf함수는 stdio.h 표준 라이브러리에 존재한다.
 
<source lang="c">
#include <stdio.h>
 
int main(int argc, char *argv[])
{
printf("출력 함수 사용 예\n");
 
return 0;
}
</source>
여기서 실시간 라이브러리 함수 printf 코드는 라이브러리 파일에 존재하고, stdio.h 헤더 파일에 형이 선언 되어 있다.
 
헤더 파일의 가장 일반적인 형태는 다음과 같은 예에서 볼 수 있다.
{| class="wikitable"
|-
! 헤더 파일
! 실시간 함수
! 메인 함수
|-
| <source lang="c">
// 파일: MyFunc.h
 
#ifndef _MYFUNC_H
#define _MYFUNC_H
 
// 함수의 형을 선언하여 호출 시,
// 인수의 형태를 알린다.
//
int add(int a, int b);
 
#endif
</source>
| <source lang="c">
// 파일: MyFunc.c
 
#include "MyFunc.h"
 
int add(int a, int b)
{
int c;
c = a+b;
return c;
}
</source>
 
| <source lang="c">
// 파일: main.c
 
#include <stdio.h>
#include "MyFunc.h"
 
int main(int argc, char *argv[])
{
int c = add(10,20);
printf("10 + 20 = %d\n", c);
return 0;
}
</source>
|}
 
헤더파일에서는 사용하는 코드는 형을 알리는 형태가 가장 일반적이다. 프로세서가 실행 될 때 변수 공간을 잡는 형태는 중복에 의해 문제가 될 수도 있다.
헤더파일의 사용은 여러 파일에서 중복으로 인크루드로 붙여서 사용하는 것이 일반적이기 때문이다.
 
형을 알리는 C/C++ 코드 :
* #define
* enum
* struct 헤더 부
* 클래스 선언 부
* 함수 형
등이 대표적이다.
따라서 이것들은 헤더 파일에 넣는 것이 일반적이다. 헤더 파일에 변수의 선언은 C/C++ 언어 입장에서는 문제가 없지만 프로그래밍 코드가 복잡해 지면 혼돈의 염려가 있으므로 습관된 헤데 파일 사용 방법 숙지가 필요하다.
적절하지 못한 헤더 파일 사용 예 :
{| class="wikitable"
|-
! 헤더 파일
! 실시간 함수
! 메인 함수
|-
| <source lang="c">
// 파일: MyFunc.h
 
#ifndef _MYFUNC_H
#define _MYFUNC_H
 
char gbuff[256];
 
char *addString(char *pa, char *pb);
 
#endif
</source>
| <source lang="c">
// 파일: MyFunc.c
 
#include <string.h>
#include "MyFunc.h"
 
char *addString(char *pa, char *pb)
{
strcpy(gbuff, pa);
strcat(gbuff, pb);
return gbuff;
}
</source>
 
| <source lang="c">
// 파일: main.c
 
#include <stdio.h>
#include "MyFunc.h"
 
int main(int argc, char *argv[])
{
char *pstr = addString("첫 문자", "다음");
printf("%s\n", pstr );
 
return 0;
}
</source>
|}
 
== 같이 보기 ==