작성
·
137
·
수정됨
1
안녕하세요.
9.11 강의 17:01에서 강사님께서
"현재 상태에서 main.c 함수는 my_print_functions.c 파일에 대해서 알지 못해요"라고 설명해주시는데요.
이때 알지 못한다는 것을 compile 단계에서 알지 못한다고 이해해도 괜찮은가요?
즉, compile단계에서는 main.c 함수가 my_print_functions.c 파일을 알지 못하지만,
linking 단계에서는 linker가 두 파일을 연결해줘서 build가 정상적으로 이루어진다고 이해하면 될까요?
아래 사진처럼 my_print_functions.h 파일을 무시하고 main.c에서 my_print_functions.c 파일을 바로 include해보았는데 에러가 나옵니다. 어떤 부분에서 잘못된 것인가요?
답변 1
1
안녕하세요, 답변 도우미 Soobak 입니다.
질문 1)
: 네, 맞습니다.
컴파일 단계에서 main.c
가 my_print_functions.c
파일에 정의된 함수들에 대해 알지 못한다는 것을 의미합니다. 말씀하신 것처럼, 링킹 단계에서 링커가 두 파일을 연결하여 빌드가 정상적으로 이루어지게 됩니다.
질문 2)
: main.c
파일에서 my_print_functions.c
파일을 직접 포함시킴으로써 발생하는 중복 정의 문제로 보입니다.
에러 메세지 "multiple definition"
, 즉, 여러번 정의되었다는 문제는 같은 함수가 여러 오브젝트 파일에서 발견되어 링커가 어떤 것을 사용해야 할지 모르기 때문에 발생하는 문제입니다.
첨부해주신 사진에서의 경우, my_print_functions.c
파일의 함수들이 main.c
파일 내에서 직접 포함되어 컴파일되면서, my_print_functions.c
파일 자체도 별도의 오브젝트 파일로 컴파일되어 함수 정의가 중복되게 됩니다.
보통, 이러한 중복을 방지하기 위해 함수의 선언만 포함하는 헤더 파일을 사용합니다.