본문 바로가기

연구 노트/C, C++

헤더 파일 중복 방지 왜 필요할까?

헤더파일 중복을 방지하기 위해서 아래와 같은 형식을 사용합니다.
 
#ifndef _XXXX_H
#define _XXXX_H
...
#endif
 
의미는 잘 알겠으나, 한가지 의문점이 있습니다.
 
일반적으로 헤더 파일에는 선언(declaration)을 합니다. 그런데 선언은 중복 되어도 에러가 발생하지 않습니다. 중복 에러가 발생할 수 있는 것은 정의(definition)입니다. 따라서 헤더 파일의 본래 목적대로 선언만을 적어놓는다면 중복 오류가 발생할 일이 없습니다. 그렇다면 왜 중복 방지를 해야할까요?
 
검색을 해보니 이 글에서 든 예시에서 헤더 파일에 구조체를 정의하는 것을 발견 하였습니다.  구조체를 포함하고 있는 헤더 파일에 중복 선언 방지 처리를 해놓지 않으면 문제가 발생할 수 있게 됩니다. 헤더 파일에는 함수의 선언 뿐만이 아니라 구조체를 정의 할 수도 있습니다. 이것은 타당하다고 생각합니다. 어러 .c 파일에서 같은 구조체를 불러와 사용해야 할 일이 있으니까요. 구조체는 '정의'해야 하는 것이기 때문에 이를 포함하고 있는 헤더 파일은 중복 방지 처리가 반드시 필요할 것입니다.