본문 바로가기

Programming Languages/C++

[함수]-함수의 정의와 호출-함수의 호출

함수를 호출할 때에는 함수의 이름과 함께 필요한 인수를 전달한다.

  1. functionName(aParameterList);
  2. varName = functionName(aParameterList);

형식1은 void형 함수나 반환된 값을 사용할 필요가 없을 때 사용한다. 형식2는 함수를 실행한 후 반환된 값을 사용하는 문장의 예이다. 여기에서는 지정된 변수에 함수가 반환하는 값을 넣는 것을 대표적으로 예시한 것이며, 함수를 수식에 직접 넣어 반환되는 값을 연산에 바로 사용할 수도 있다. aParameterList에는 함수에 전달할 인수를 나열한 것으로, 각각의 인수에 해당되는 상수, 변수, 수식 등을 실 매개변수(actual parameters)라고 한다.

다음 프로그램은 화씨온도를 섭씨온도로 환산하는 함수를 정의하여 사용하는 예이다.

#include <iostream>
using namespace std;

// 화씨온도를 섭씨온도로 변환하는 함수
// 매개변수 float fahr : 화씨온도
// 반환값 섭씨온도(float)

float FahrToC(float fahr) {  // 함수 FahrToC()를 정의
	return (fahr - 32) * 5 / 9;
}

int main() {
	float fTemp, cTemp;

	cout << "화씨온도 : ";
	cin >> fTemp;
	cTemp = FahrToC(fTemp); // 함수 호출
	cout << "---> 섭씨온도 : " << cTemp << endl;
	return 0;
}

====== 결과 ======
화씨온도 : 75
---> 섭씨온도 : 23.8889

함수의 원형 ▶ C++에서 모든 식별자는 사용하기에 앞서 선언이 되어 있어야 한다. 함수의 이름도 마찬가지이다. 위의 코드에서도 cTemp = FahrToC(fTemp); 에서 함수를 사용할 수 있는 이유는 그 전에 미리 함수를 정의했기 때문이다. 그런데 프로그램을 만들다 보면 이렇게 순서에 맞춰 함수를 배치하는 것이 어렵거나 또는 가능하지 않을 수 있다.

그러한 경우에는 함수를 완전히 정의하는 대신 함수의 원형(prototype)을 프로그램의 앞부분에 선언한다. 함수의 원형에는 다음과 같이 함수의 이름과 함수가 반환하는 값의 자료형, 그리고 함수가 인수를 전달받기 위한 매개변수들의 자료형을 명시함으로써 컴파일러가 그 함수의 사용 방법을 알 수 있게 한다.

ReturnType functionName(fParameterList);

위 코드를 예시로 들면 float FahrToC(float fahr);라고 함수의 원형을 선언하면 된다.

원형은 함수의 반환 자료형과 매개변수의 개수 및 자료형을 알려주기 위한 것이므로 형식 매개변수의 이름(fahr 같은)은 생략할 수 있지만, 매개변수에 의미를 이해할 수 있는 이름을 만들어 작성하는 것이 그 함수를 보다 잘 이해할 수 있게 하는 방법이다. C++언어에서는 C언어에서 사용했던 것처럼 매개변수 리스트를 생략하고

flat FahrToC();

라고 기입하는 것은 허용되지 않는다. C++언어에서는 함수의 원형에 형식 매개변수의 자료형을 일일이 나열하는데, 이것은 뒤에서 설명할 함수 다중정의에 따른 올바른 함수의 식별 및 필요한 경우 적절한 자료형의 반환을 통한 올바른 자료형의 인수 전달을 가능하게 한다.