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

양승빈님의 프로필 이미지
양승빈

작성한 질문수

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

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

작성

·

159

·

수정됨

1

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

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

 

#따배씨 2.9 함수만들기

답변 2

1

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

 

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

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

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

0

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

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

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

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

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

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

양승빈님의 프로필 이미지
양승빈

작성한 질문수

질문하기