inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

9.11 헤더 파일 만드는 방법

다른 파일 include 관련 질문

205

열공!

작성한 질문수 11

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해보았는데 에러가 나옵니다. 어떤 부분에서 잘못된 것인가요?

c

답변 1

1

Soobak

안녕하세요, 답변 도우미 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 파일 자체도 별도의 오브젝트 파일로 컴파일되어 함수 정의가 중복되게 됩니다.
보통, 이러한 중복을 방지하기 위해 함수의 선언만 포함하는 헤더 파일을 사용합니다.

 

Export template 안됨

1

17

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

54

3

main 함수에서 왜 int만 선언이 되는걸까요

1

56

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

54

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

49

1

프로토타입과 함수간의 인자 불일치

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

137

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

61

2

getchar(), putchar()

1

93

3

강의자리ㅛ

1

79

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

113

2

소스파일안에 여러 파일

1

75

2

F5와 F7의 차이

1

76

2

c = TWO * (a+b); 에서 a와 b는?

1

58

2

; 세미콜론을 붙이는 기준에 문의

1

68

1

Step over 기능 문의

1

53

2

2.6 강의 따옴표 출력 규칙 문의

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

64

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

53

2