엄청 매우 오랜만에 블로그에 들어왔는데, 왠지 별 쓸모없어보이는 내 블로그에 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라면, 당신은 또 컴파일러님께 혼날거란 말이다.
'Computer > Language - C/C++' 카테고리의 다른 글
C++ 바닥부터 시작하기(2) - 변수의 선언과 초기화 (0) | 2011.03.23 |
---|---|
C++ 바닥부터 시작하기(1) - Hello World (0) | 2011.03.22 |
case 문에서는 변수 선언이 안된다?! (0) | 2010.11.09 |