본문 바로가기

Computer/Language - C/C++

C++ 바닥부터 시작하기(3) - 함수의 선언과 프로토타입

엄청 매우 오랜만에 블로그에 들어왔는데, 왠지 별 쓸모없어보이는 내 블로그에 hit수가 생각보다 높아, 뭔가 써보고싶어졌다. 


머릿말은 이쯤하고, 함수의 선언과 프로토타입에 대해 알아보자.


함수는 사용되기 전(call 되기 전)에 반드시 선언이 되어있어야 한다. 그렇지 않으면 컴파일러님께서 "너 왜 없는 함수를 불러대냐? 디버그 먹엉 두 번 먹엉"를 외치신다. 


int main(){

hello(); // 그래서 hello는 어디에??

return 0;

}


그래서 함수를 선언해주었다.



int main(){

hello(); 

return 0;

}


void hello(){

printf("hello world\n");

}


근데 또 안된다!!!!!!는 당연히 우리의 잘못이다. 컴파일러님은 언제나 옳으시다.

자 위에 써놓은 말을 다시 보자. 함수는 사용되기 전(call 되기 전)에 반드시 선언이 되어있어야 한다. 그런데 위의 예제코드는 사용되기 전에 선언이 되어있지 않다! 그러므로 요렇게~위치를 바꿔주면 원하는 결과를 얻을 수 있다.



void hello(){

printf("hello world\n");

}


int main(){

hello(); 

return 0;

}


그런데 이렇게 하다보면, 메인함수를 맨 마지막에 찾아야하니, 코드의 크기가 커지면 귀찮아지므로 함수의 프로토타입을 만들어주도록 한다. Prototype은 함수의 입력, 출력값을 미리 선언하는 것이라 보면 된다.



void hello();


int main(){

hello(); 

return 0;

}


void hello(){

printf("hello world\n");

}


위와 같이 hello라는 함수를 main 위에 써줌으로 컴파일러님께 함수의 존재를 알려드리는 것이다. 

이때 주의할 점. 프로토타입과 원래 함수의 input/output 꼴이 같아야 한다는 점.

예를 들어 원래 함수에서 return값을 int 로 바꿨는데, 프로토타입 return 값이 여전히 void라면, 당신은 또 컴파일러님께 혼날거란 말이다.