c++의 기초인 함수에 대해 알아보자. 함수를 사용하려면 다음과 같은 작업을 해야 한다.
이는 코드에서 다음과 같이 나타난다.
#include <iostream>
using namespace std;
void Simple(); // 함수 원형 제공. ;를 붙여야 함.
int main()
{
Simple(); // 함수 호출.
}
// 함수 정의 제공.
void Simple() // ; 안 붙여도 됨.
{
cout << "Simple 함수 호출 완료!" << endl;
}
실행 결과
자료형 함수명(매개변수)
자료형 부분에다가 void를 넣으면 리턴값이 없다. 만약 int를 넣으면 반드시 int형 값을 리턴해주어야 한다.
void Say()
{
cout << "리턴형이 없는 함수" << endl;
return; // 리턴값이 업다. 생략 가능.
}
int Talk()
{
cout << "리턴형이 있는 함수" << endl;
return 4; // int형을 리턴해준다.
}
함수는 배열 이외의 자료형을 리턴할 수 있다.
우리가 지금까지 써왔던 int main()도 함수이다. int형이라 return 0;을 해주어야 하는데, 프로그램이 발전하면서 이런 거 안 해줘도 된다. 0이외의 값이 return이 되면 프로그램에 뭔가 문제가 있는 것을 알 수 있다.
(이러면 문제가 있는 것이다.)
함수에서 값이 바로 리턴된다고 생각할 수 있지만, 실상은 그렇지 않다. 함수를 호출하여 리턴을 하면, 그 값은 CPU의 지정된 레지스터나 메모리에 복사를 한다. 그러면 함수를 호출한 프로그램(보통의 경우에는 main 함수)이 그 위치에 무엇이 있는지 조사를 해서 가져오는 식이다. 그래서 리턴하는 함수와 호출하는 함수의 데이터형을 일치시켜야 하는 것이다.
함수는 코드가 남아있어도 리턴을 만나면 종료된다.
int bigger(int a, int b)
{
if (a > b)
return a;
else
return b;
cout << "큰 수 출력" << endl; // if else 구문에서 반드시 return을 만나기 때문에 호출되지 않는다.
}
근데 왜 함수 원형을 위에다가 작성하고 정의를 밑에다가 작성할까? 프로그램은 위에서부터 밑으로 컴파일 하기 때문에 함수 원형을 위에다가 적지 않으면, 프로그램 입장에서는 그 함수를 알 수 없다. 그럼 정의를 위에다 적지 않는 이유는? 이게 항상 가능한 것은 아니다. 그리고 c++에서는 프로그램 전체 구조를 main()이 제공하기 때문에 main()을제일 앞에다가 두는 게 관례이다.