C++ 함수


함수는 함께 작업을 수행하는 명령문 그룹입니다. 모든 C++ 프로그램에는 최소한 하나의 함수, 즉 주 함수 main()이 있으며, 모든 간단한 프로그램은 다른 추가 함수를 정의할 수 있습니다.

코드를 다양한 기능으로 나눌 수 있습니다. 코드를 여러 기능으로 나누는 방법은 사용자에게 달려 있지만 논리적으로 구분은 일반적으로 특정 작업을 수행하는 각 기능을 기반으로 합니다.

함수 선언은 컴파일러에게 함수의 이름, 반환 유형 및 매개변수를 알려줍니다. definition 함수는 함수의 실제 본문을 제공합니다.

C++ 표준 라이브러리는 프로그램이 호출할 수 있는 수많은 내장 함수를 제공합니다. 예를 들어, strcat() 함수는 두 문자열을 연결하는 데 사용되고, memcpy() 함수는 메모리를 다른 위치로 복사하는 데 사용됩니다.

함수에는 메서드, 서브루틴, 프로그램 등 다양한 이름이 있습니다.

함수 정의

C++에서 함수 정의의 일반적인 형태는 다음과 같습니다.

return_type function_name( parameter list )
{
   body of the function
}

C++에서 함수는 함수 헤더와 함수 본문으로 구성됩니다. 아래에는 함수의 모든 구성요소가 나열되어 있습니다.

  • 반환 유형: 함수는 값을 반환할 수 있습니다. return_type은 함수에서 반환된 값의 데이터 유형입니다. 일부 함수는 값을 반환하지 않고 필요한 작업을 수행합니다. 이 경우 return_type은 키워드 void입니다.

  • 함수 이름: 함수의 실제 이름입니다. 함수 이름과 매개변수 목록이 함께 함수 서명을 구성합니다.

  • 매개변수: 매개변수는 자리 표시자와 같습니다. 함수가 호출되면 실제 인수라고 하는 인수에 값을 전달합니다. 매개변수 목록에는 함수 매개변수의 유형, 순서 및 개수가 포함됩니다. 매개변수는 선택사항입니다. 즉, 함수에 매개변수가 포함될 수 없습니다.

  • 함수 본문: 함수 본문에는 함수가 수행하는 작업을 정의하는 일련의 명령문이 포함되어 있습니다.

예제

다음은 max() 함수의 소스코드입니다. 이 함수에는 num1과 num2라는 두 개의 매개변수가 있으며 두 숫자 중 더 큰 숫자를 반환합니다.

// 函数返回两个数中较大的那个数
 
int max(int num1, int num2) 
{
   // 局部变量声明
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

함수 선언

함수 declaration은 컴파일러에게 함수 이름과 함수 호출 방법을 알려줍니다. 함수의 실제 본문은 별도로 정의할 수 있습니다.

함수 선언에는 다음 부분이 포함됩니다.

return_type function_name( parameter list );

위에 정의된 max() 함수의 경우 다음은 함수 선언입니다.

int max(int num1, int num2);

함수 선언에서 매개변수 이름은 중요하지 않고 유형만 중요합니다. 매개변수가 필수이므로 다음도 유효한 선언입니다.

int max(int, int);

한 소스 파일에서 함수를 정의하고 다른 파일에서 해당 함수를 호출하는 경우 함수 선언이 필요합니다. 이 경우 함수가 호출되는 파일 상단에 함수를 선언해야 합니다.

함수 호출

C++ 함수를 만들 때 함수가 수행하는 작업을 정의한 다음 함수를 호출하여 정의된 작업을 완료합니다.

프로그램이 함수를 호출하면 프로그램 제어가 호출된 함수로 이전됩니다. 호출된 함수는 정의된 작업을 수행하고, 함수의 return 문이 실행되거나 함수의 닫는 대괄호에 도달하면 프로그램 제어를 기본 프로그램으로 반환합니다.

함수 호출 시 필수 매개변수를 전달하고, 함수가 값을 반환하면 반환값을 저장할 수 있습니다. 예를 들면 다음과 같습니다.

#include <iostream>
using namespace std;
 
// 函数声明
int max(int num1, int num2);
 
int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
   int ret;
 
   // 调用函数来获取最大值
   ret = max(a, b);
 
   cout << "Max value is : " << ret << endl;
 
   return 0;
}
 
// 函数返回两个数中较大的那个数
int max(int num1, int num2) 
{
   // 局部变量声明
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

max() 함수와 main() 함수를 함께 넣고 소스 코드를 컴파일합니다. 최종 실행 파일이 실행되면 다음 결과가 생성됩니다.

Max value is : 200

함수 매개변수

함수가 매개변수를 사용하려면 매개변수 값을 허용하는 변수를 선언해야 합니다. 이러한 변수를 함수의 형식 매개변수라고 합니다.

형식 매개변수는 함수 내의 다른 지역 변수와 마찬가지로 함수에 들어갈 때 생성되고 함수를 종료할 때 소멸됩니다.

함수를 호출할 때 함수에 매개변수를 전달하는 두 가지 방법이 있습니다.

Call typeDescription
Call by value 이 메서드는 매개변수의 실제 값을 함수의 형식 매개변수에 복사합니다. 이 경우 함수 내의 형식 매개변수를 수정해도 실제 매개변수에는 영향이 없습니다.
포인터 호출이 메서드는 매개변수의 주소를 형식 매개변수에 복사합니다. 함수 내에서 이 주소는 호출에 사용되는 실제 매개변수에 액세스하는 데 사용됩니다. 이는 형식 매개변수를 수정하면 실제 매개변수에 영향을 미친다는 것을 의미합니다.
참조 호출이 방법은 매개변수의 참조를 형식 매개변수에 복사합니다. 함수 내에서 이 참조는 호출에 사용되는 실제 매개변수에 액세스하는 데 사용됩니다. 이는 형식 매개변수를 수정하면 실제 매개변수에 영향을 미친다는 것을 의미합니다.

기본적으로 C++에서는 값별 호출을 사용하여 매개변수를 전달합니다. 일반적으로 이는 함수 내의 코드가 함수 호출에 사용되는 매개변수를 변경할 수 없음을 의미합니다. 앞에서 언급한 예제에서는 max() 함수를 호출할 때 동일한 방법을 사용합니다.

매개변수의 기본값

함수를 정의할 때 매개변수 목록에 나오는 각 매개변수에 대한 기본값을 지정할 수 있습니다. 함수 호출 시 실제 매개변수의 값을 공백으로 두면 이 기본값이 사용됩니다.

이 작업은 함수 정의에서 할당 연산자를 사용하여 매개변수에 값을 할당함으로써 수행됩니다. 함수 호출 시 인수에 값이 전달되지 않으면 기본값이 사용됩니다. 값을 지정하면 기본값이 무시되고 전달된 값이 사용됩니다. 아래 예를 참조하세요.

#include <iostream>
using namespace std;
 
int sum(int a, int b=20)
{
  int result;

  result = a + b;
  
  return (result);
}

int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
   int result;
 
   // 调用函数来添加值
   result = sum(a, b);
   cout << "Total value is :" << result << endl;

   // 再次调用函数
   result = sum(a);
   cout << "Total value is :" << result << endl;
 
   return 0;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Total value is :300
Total value is :120