inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

변수나 함수 사용전에 선언이 되어있어야 사용가능에 대한 질문

259

양승빈

작성한 질문수 1

1

void 함수를 main함수보다 아래에 쓰든 위에 쓰든 컴파일러는 main 함수부터 읽는데

void 함수를 main함수 아래에 썼을 때 에러가 나는 이유가 이해가 안됩니다.

 

#따배씨 2.9 함수만들기

c

답변 2

1

Soobak

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

 

질문해주신 것 내용 중 "컴파일러는 main() 함수부터 읽는다" 라는 표현은 '실행 흐름' 이나 '프로그램의 시작점' 에 대한 관점에서의 표현입니다.

실행 단계가 아닌, 컴파일 단계에서는 모든 코드가 '위에서부터 아래로' 스캔되면서 처리됩니다.
실행 단계에서는 main() 함수부터 호출되어 프로그램이 실행됩니다.
즉, '프로그램의 실행 순서' 와 '코드의 컴파일 순서' 관점을 구분하는 것이 중요합니다.

따라서, main() 내에 위치한 함수의 선언(Prototype)에 대한 정보가 main() 함수 위에 존재하지 않았다면, 컴파일 단계에서 컴파일러는 해당 함수를 알지 못하여 에러를 발생시킵니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

양승빈님의 질문은 C언어에서의 함수 선언 및 정의의 위치와 관련된 이해에 대한 것으로 보입니다. 함수를 main 함수보다 아래에 작성할 경우, 컴파일러가 해당 함수를 main 함수에서 호출하기 전까지 인식하지 못하기 때문에 발생하는 문제점을 해결하고자 합니다.

이와 관련하여 “질문“에서 유사한 상황에 대해 설명하고 있습니다. 이 게시글에서는 main.c에 함수의 프로토타입만 선언되어 있고 실제 구현(.c 파일이나 타 위치)이 별도로 되어 있을 때 컴파일러와 링커가 어떻게 함수의 정의를 찾아내서 프로그램을 성공적으로 실행시키는가에 대한 설명이 포함되어 있습니다.

C언어에서 함수를 사용하려면 해당 함수에 대한 정보를 컴파일러가 미리 알고 있어야 합니다. 이를 위해 함수의 프로토타입(선언)을 제공하거나, 함수의 정의를 main 함수보다 먼저 위치시키는 방법을 사용합니다. 함수의 프로토타입은 함수의 존재와 그 인터페이스(반환 타입, 이름, 매개변수 목록)만을 선언하여, 함수의 구현 부분이 어디에 위치하든지 간에 컴파일러가 그 함수를 인식할 수 있도록 돕습니다.

함수를 main보다 아래에 정의하려면, 해당 함수의 프로토타입을 main 함수 전에 선언해야 합니다. 이렇게 하면 main 함수 내에서 해당 함수를 호출할 때 컴파일러가 이미 함수의 인터페이스를 알고 있어 에러 없이 해당 호출을 처리할 수 있게 됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Export template 안됨

1

19

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

80

2

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

1

113

2

소스파일안에 여러 파일

1

76

2

F5와 F7의 차이

1

76

2

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

1

58

2

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

1

69

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

65

2

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

1

53

2

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

1

53

2