인프런 커뮤니티 질문&답변
12.12 헤더 관련 질문
해결된 질문
작성
·
33
1
9.11에서 헤더를 처음 설명해주셨을떈,

이렇게 c파일에 해당 헤더를 인클루드를 하셨는데,

12.12강의에선 c파일에 해당 헤더를 인클루드를 안하셨는데, c파일에 해당 헤더를 인클루드를 무조건 할 필요가 없는걸까요?
답변 2
1
안녕하세요? 질문&답변 도우미 durams입니다.
해당 예제 상태에서는 .c 파일에서 헤더 파일을 include하지 않더라도 빌드가 됩니다. 다만 언제나 그런 것은 아니며, 정의가 있는 .c 파일에서는 선언이 존재하는 헤더 파일을 include하시는 것이 좋습니다.
그 의미는 컴파일 단계에서 정확한 코드 작성을 강제하는 데 있습니다. my_rand.c에서 my_rand.h를 include 한다면 전방 선언 후 정의하는 것이기 때문에 자연스럽게 선언과 정의의 간 함수 시그니처가 같음이 보장됩니다.
하지만 include 하지 않는다면 my_rand.c는 독립된 translation unit으로써 컴파일됩니다. 만약 my_rand.c와 my_rand.h의 함수 시그니처가 약간 다르다면, 컴파일과 링킹이 성공하더라도 실행 시 문제가 발생합니다. 예를 들어 my_rand.h에서는 int를 받도록 선언이 작성되어있지만, my_rand.c에서는 float를 받도록 정의가 작성되어있을 수 있겠죠.
0
안녕하세요, 인프런 AI 인턴입니다. luki님!
헤더 파일의 포함 여부에 관한 질문에 답변드리겠습니다.
헤더 파일의 역할: 헤더 파일은 함수 선언, 매크로 정의, 데이터 타입 선언 등을 포함하여 다른 소스 파일에서 해당 코드를 참조할 수 있도록 도움을 줍니다. 즉, 코드의 재사용성과 모듈화를 지원합니다.
왜 include 하나요?:
#include지시문은 특히 여러 소스 파일 간에 선언들을 공유할 필요가 있을 때 유용합니다. 이 방식은 코드를 조직화하는 데 매우 중요한 역할을 합니다.c파일에 꼭 include 할 필요는 없습니다:
- 만약 해당 c 파일이 그 자체로 완전하고, 다른 파일로부터의 참조가 필요 없다면, 꼭 헤더 파일을 포함할 필요는 없습니다. 그러나, 동일 프로젝트 내 다른 파일에서 접근해야 하는 함수나 변수가 포함되어 있다면, 헤더 파일을 통해 명시적으로 선언을 해주는 것이 좋습니다.
- 만약 해당 c 파일이 그 자체로 완전하고, 다른 파일로부터의 참조가 필요 없다면, 꼭 헤더 파일을 포함할 필요는 없습니다. 그러나, 동일 프로젝트 내 다른 파일에서 접근해야 하는 함수나 변수가 포함되어 있다면, 헤더 파일을 통해 명시적으로 선언을 해주는 것이 좋습니다.
왜 어떤 경우에 포함하지 않나요?:
- 한 파일만 사용하는 함수 및 변수 정의의 경우에는 불필요한 중복을 피하기 위해 그 안에서 직접 참고하지 않을 수도 있습니다. 그러나 확장성과 유지보수 측면에서는 헤더 파일로 추출해 두는 것이 권장됩니다.
- 한 파일만 사용하는 함수 및 변수 정의의 경우에는 불필요한 중복을 피하기 위해 그 안에서 직접 참고하지 않을 수도 있습니다. 그러나 확장성과 유지보수 측면에서는 헤더 파일로 추출해 두는 것이 권장됩니다.
다음의 글들도 질문과 관련 있는 정보를 가지고 있으니 참고하면 좋습니다:
- main.c에는 새로이지정한 함수의 프로토타입만 있는 헤더파일만이 include된것이지 그 내용이 정의된 my print function .c 가 include된건 아닌데 어떻게 정상실행되나요??
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





