[C++] 함수 기초

HY K·2024년 8월 19일

이번 포스팅에서는 C++ 함수의 기초에 대해서 다뤄보자.


함수

함수는 매개변수(parameter)를 통해 값을 전달받아 정해진 작업에 따라서 처리하고, 결과를 반환(return)하는 코드 블록이다.
C++의 함수는 다음과 같이 구성된다(C언어도 동일하다).

리턴타입 함수이름(매개변수 이름들){
	정해진 작업문
    결과 리턴문
}
  • 함수 이름 : 변수와 같이 목적에 맞게 명명
  • 매개변수 이름들 : 외부에서 전달하는 값을 저장하는 변수 선언
  • 리턴 타입 : 함수가 값들을 처리하고 리턴하는 데이터 타입들

예시는 다음과 같다.

int adder(int a, int b){
	int sum;
    sum = a+b;
    return sum;
}

함수 호출

함수에게 일을 지시하고, 결과를 받아가는 것을 함수 호출이라고 부른다. 함수를 호출할 때는 매개변수에 값을 넘겨주고, 결과를 받아와야 한다.

int n = adder(123, 234);

그러면 함수를 작성하고 호출하는 예시 코드를 한번 보자.

# include <iostream>
using namespace std;

int adder(int a, int b) {
	int sum;
	sum = a + b;
	return sum;
}

int main() {
	int n = adder(123, 345);
	cout << "sum = " << n << endl;

	int a, b;
	cout << "두 정수를 입력하세요>>";
	cin >> a >> b;
	n = adder(a, b);
	cout << a << "와 " << b << "의 합은 " << n << "입니다." << endl;
}

함수 작성과 호출에 있어서 주의할 점

  1. 함수 호출 시 리턴 타입 주의

함수를 호출하고 전달받을 때 리턴 타입을 맞출 필요가 있다. 예를 들어 아무 값도 리턴하지 않는 void 타입의 함수를 다른 자료형에 넣으면 컴파일 오류가 발생한다.

  1. 함수 호출 시 매개변수 개수와 타입 주의

함수를 호출할 때, 반드시 함수에 선언된 매개변수 개수만큼만 값을 전달해야 한다. 그리고 선언한 매개변수의 타입에 맞는 값을 전달해야 한다. 둘 다 하지 않을 경우 컴파일 오류가 발생한다.

함수 원형

변수를 선언하고, 추후에 값을 부여하는 것처럼, 함수의 형식만 선언한 것을 함수의 원형(prototype)이라고 부른다. 예를 들어, 위에서 예시로 든 adder 함수의 원형은 다음과 같다.

int adder(int a, int b);

함수의 원형을 선언하는 이유는 함수 이름, 매개변수 타입과 개수, 리턴 타입을 미리 선언함으로써 컴파일러에게 함수의 형식을 알려주어, 함수의 호출 문장이 정확한지 판단하는 것을 돕기 위함이다.

또한 코드 맨 위에 함수 원형을 미리 선언해놓은 경우, 함수를 가장 밑부분에다가 작성해도 된다(어디에 작성해도 된다). 만약 그렇지 않고(원형을 선언하지 않고) 함수를 호출한 다음에, 함수를 그 뒤에 작성하게 되면 컴파일 오류가 발생한다. 이는 컴파일러가 호출 코드를 해석할 때 함수를 정확히 알고 확인할 수 없기 때문이다.

# include <iostream>
using namespace std;

int adder(int a, int b);


int main() {
	int n = adder(123, 345);
	cout << "sum = " << n << endl;

	int a, b;
	cout << "두 정수를 입력하세요>>";
	cin >> a >> b;
	n = adder(a, b);
	cout << a << "와 " << b << "의 합은 " << n << "입니다." << endl;
}

int adder(int a, int b) {
	int sum;
	sum = a + b;
	return sum;
}

이런 식으로 선언하면 된다.

매개변수로 배열 전달

함수의 매개변수로 배열도 전달이 가능하다. 예를 들어보자.

int addArray(int a[], int size){
	...
}
// 배열과 배열의 크기를 매개변수로 지정

위 함수는 다음과 같이 쓸 수 있다.

int n[5] = {1,2,3,4,5};
int s = addArray(n,5);
int m[3] = {1,2,3};
int t = addArray(m,3);

배열을 매개변수로 받을 때는, 함수의 매개변수 목록에 굳이 배열의 크기를 쓸 필요 없다는 것을 주의하자. 또한, 선언한 매개변수 a를 통해 배열에 접근하여 배열의 값을 읽거나 수정할 수 있다.

다음 코드는 배열을 매개변수로 가진 함수를 선언하고, 함수를 호출하는 코드이다.

# include <iostream>
using namespace std;

int addArray(int a[], int size);
void makeDouble(int a[], int size);
void printArray(int a[], int size);

int main() {
	int n[] = { 1,2,3,4,5 };
	int sum = addArray(n, 5);
	cout << "배열 n의 합은 " << sum << "입니다." << endl;

	makeDouble(n, 5);
	printArray(n, 5);
}

int addArray(int a[], int size) {
	int i, sum = 0;
	for (i = 0; i < size; i++) {
		sum += a[i];
	}
	return sum;
}

void makeDouble(int a[], int size) {
	int i;
	for (i = 0; i < size; i++)
		a[i] *= 2;
}

void printArray(int a[], int size) {
	int i;
	for (i = 0; i < size; i++)
		cout << a[i] << ' ';
	cout << endl;
}
profile
로봇, 드론, SLAM, 제어 공학 초보

0개의 댓글