6. 함수(1) - 함수의 기초

WanJu Kim·2022년 10월 22일
0

C++

목록 보기
25/81

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()을제일 앞에다가 두는 게 관례이다.

profile
Question, Think, Select

0개의 댓글