개발관련/정보

개발관련 - C언어 프로토타입(Prototype)

고통받는다 2023. 7. 3. 03:31

이 포스팅을 공부하면서 C에 대한 궁금함이 생겼었습니다.

프로토 타입의 역할이 정확히 뭔가? 입니다.

인터넷에 검색해보니 그냥 단순히 구조를 한번에 알수있다 이렇게 되어있고요.. 전 납득이 되지 않았습니다.

구조를 한번에 이해를 할수 있게 하면 왜 자바에는 없는거지? 하고 말이죠...

그리고 오늘 대표님께 질문해보니... 프로토 타입을 선언하는 이유가 있더군요...

C 컴파일러

 

 

우선 C의 컴파일러는 여러가지 버전이 있고 ANSI C 를 기준으로 하고있습니다.

그중 C99를 주로 많이 사용한다고 하더군요.

C의 컴파일러는 위에서 아래로 컴파일을 진행합니다.

이건 상당히 중요한 부분입니다 위에서 아래로..

그렇다면 이 두 코드를 비교해 봅시다.

 

1번

 

2번

 

여러분이 자바나 코틀린 같은 언어를 하시고 오셨다면

이 두개가 무슨 차이인데? 라고 하실수 있습니다.

자바나 코틀린에서는 둘다 멀쩡히 돌아가기 때문이죠...

하지만 C에서는 다릅니다.

C에서는 2번과 같이 코딩을하면 컴파일 오류가 나버립니다.

이유는 아까 위에서 설명한 C컴파일러는 위에서 아래로 컴파일을 진행하기 때문입니다.

즉 Main 문 위에서 함수가 선언될시 컴파일러가 위에서 아래로 진행하기 때문에 바이너리가 생성되서 문제가 없지만.

Main문 아래에 선언할시 main 문 안에서 함수 호출을 할때 해당 함수 바이너리가 생성이 되지 않았기 때문에 바로 에러를 터트리고 실행이 되지 않는것입니다.

실제 오류 화면

 

프로토 타입을 선언해주는 이유

 

때문에 Main 문 아래에 함수를 선언할때는 Main문 위쪽에 프로토 타입을 선언해줘서 미리 바이너리 생성을 해주는겁니다.

프로토 타입을 선언하면 문제없이 잘 작동됨

즉 프로토 타입을 왜 쓰냐... 라고 물으면 C는 함수의 위치에 따라 컴파일 에러가 날수 있기 때문에 프로토타입으로 해당 오류를 막아준다... 라고 이해해주시면 됩니다.

저는 2번 케이스도 잘 되던데요?

 

 

어떤 컴파일러에서는 위와 같이 코딩을 해도 잘 되는 경우도 있습니다.

이럴때는 해당 컴파일러가 어떤 버전을 사용하는지, 어떻게 동작하는지 확인해야할 필요가 있습니다.

그리고 컴파일은 되나 상세보기를 하면 이렇게

함수가 선언되지 않았다고 warning 표시가 되어있을겁니다.