1. #ifndef, #define, #endif

임의로 만든 헤더파일 안에는 항상 아래와 같은 형식으로 내용을 처리하여 준다. 하나의 헤더 파일만 사용한다면 크게 의미가 없겠으나, 다수의 헤더 파일을 작성하고 헤더 파일이 헤더 파일을 include하게 될 경우가 분명 생긴다.

이 경우, 아래와 같이 중복 방지 처리를 해주지 않는다면 언젠가 꼬여버려서 하나의 C파일 혹은 헤더 파일이 동일한 헤더 파일을 2번 이상 include하게 되는 경우가 생길 수 있다. 그렇게 된다면 컴파일 에러가 뜨니 중복 방지 처리에 습관을 들여주자.

헤더 파일 이름은 hello.h라고 가정한다면, hello.h의 내용은 아래와 같다.

#ifndef HELLO_H
#define HELLO_H

(내용)

#endif

(1) #ifndef & #define

c 파일에서 #include "hello.h" 를 통해 hello.c 헤더 파일을 인클루드하고자 한다면 가장 먼저 ifndef(if not defined) 구문으로 들어온다. 만약 c 파일에서 hello.h가 정의되어 있지 않았다면 hello.h를 정의하겠다는 얘기다.

여기서 주의할 점은 헤더 파일의 이름 중 영어는 모두 대문자로 기재해줘야 하며, 언더바(_)는 물론이고 온점(.) 또한 언더바로 기재해줘야 한다.

또한, norminette에 따라 #if, #ifndef, #ifdef 뒤에는 들여쓰기를 해줘야 하는데 탭이 아니고 스페이스 하나로 들여쓰기를 해준다.

(2) #endif

#define HELLO_H 아래에 정의할 내용을 써준 후 #endif를 하면 ifndef의 조건에 충족되어 define 하던 내용을 마무리하고 ifndef 구문을 종료하겠다는 시그널이다.


2. 헤더 파일에서 정의할 수 있는 것들

사실 헤더 파일에서 정의할 수 있는 것들은 C 파일 안에서도 모두 정의가 가능하다. 주로 헤더 파일에 정의하는 것들을 기재하는 것이며, 특히 42서울 라피신 과정에서는 구조체를 C 파일에서 정의하면 안 된다는 규칙이 있으므로 꼭 헤더 파일에서 정의해주자.

(1) 다른 헤더 파일을 include

기존의 헤더 파일을 include하려면 #include <헤더파일명>을, 임의로 만든 헤더 파일을 include 하려면 #include "헤더파일명"을 적어준다. 이렇게 헤더 파일이 헤더 파일을 include하게 설계한다면, C 파일에서 많은 헤더 파일을 include하지 않아도 된다.

(2) 함수 선언문

헤더 파일에서 함수를 선언할 때는 선언만 해주고, 정의는 C 파일 안에 작성토록 한다. A 파일에서 정의한 함수를 B 파일에서 사용해야 한다면 두 파일 모두 같은 헤더 파일을 include하고 있어야 한다. 자세한 내용은 아래 그림을 보고 이해하자. 더욱 자세한 내용이 필요하다면 그림을 클릭해서 코딩 도장 사이트로 이동하여 다시 확인하자.

(3) #define 전처리기를 통한 상수 혹은 문자열 치환