인프런 커뮤니티 질문&답변

열공!님의 프로필 이미지
열공!

작성한 질문수

홍정모의 따라하며 배우는 C언어

9.11 헤더 파일 만드는 방법

다른 파일 include 관련 질문

작성

·

137

·

수정됨

1

안녕하세요.

 

  1. 9.11 강의 17:01에서 강사님께서

"현재 상태에서 main.c 함수는 my_print_functions.c 파일에 대해서 알지 못해요"라고 설명해주시는데요.

이때 알지 못한다는 것을 compile 단계에서 알지 못한다고 이해해도 괜찮은가요?

즉, compile단계에서는 main.c 함수가 my_print_functions.c 파일을 알지 못하지만,

linking 단계에서는 linker가 두 파일을 연결해줘서 build가 정상적으로 이루어진다고 이해하면 될까요?

 

  1. 아래 사진처럼 my_print_functions.h 파일을 무시하고 main.c에서 my_print_functions.c 파일을 바로 include해보았는데 에러가 나옵니다. 어떤 부분에서 잘못된 것인가요?

답변 1

1

안녕하세요, 답변 도우미 Soobak 입니다.

 

질문 1)
: 네, 맞습니다.
컴파일 단계에서 main.cmy_print_functions.c 파일에 정의된 함수들에 대해 알지 못한다는 것을 의미합니다. 말씀하신 것처럼, 링킹 단계에서 링커가 두 파일을 연결하여 빌드가 정상적으로 이루어지게 됩니다.

 

질문 2)
: main.c 파일에서 my_print_functions.c 파일을 직접 포함시킴으로써 발생하는 중복 정의 문제로 보입니다.
에러 메세지 "multiple definition" , 즉, 여러번 정의되었다는 문제는 같은 함수가 여러 오브젝트 파일에서 발견되어 링커가 어떤 것을 사용해야 할지 모르기 때문에 발생하는 문제입니다.

첨부해주신 사진에서의 경우, my_print_functions.c 파일의 함수들이 main.c 파일 내에서 직접 포함되어 컴파일되면서, my_print_functions.c 파일 자체도 별도의 오브젝트 파일로 컴파일되어 함수 정의가 중복되게 됩니다.
보통, 이러한 중복을 방지하기 위해 함수의 선언만 포함하는 헤더 파일을 사용합니다.

 

열공!님의 프로필 이미지
열공!

작성한 질문수

질문하기