함수
코드를 모두 main() 안에 담으면 관리하기가 힘들어진다.
프로그램의 가독성을 높이려면 함수 단위로 간결하게 나눠서 작성해야 한다.
C++에서 함수를 사용하려면 반드시 사용하려는 위치보다 앞에 선언해야 한다.
특정한 파일 안에서만 사용할 함수는 선언과 구현(정의)을 모두 소스 파일 안에 작성한다.
함수 선언
함수를 선언하는 문장을 함수 프로토타입(함수 원형) 또는 함수 헤더라 부른다.
함수의 내용은 보지 않고, 그 함수에 접근하는 방식만 표현한다는 의미가 강하다.
함수의 리턴 타입을 제외한 함수 이름과 매개변수 목록을 함수 시그니처(함수 서명)라고 부른다.
다음 코드는 함수를 선언하는 방법이다.
void myFunction(int i, char c);
리턴 타입을 void로 지정했는데, 이 함수는 호출한 측으로 리턴하는 값이 없다는 것을 의미한다.
하지만 이대로 실행하면 링크 과정에서 에러가 발생한다.
함수 정의
함수를 구현(정의)하는 방법은 다음과 같다.
void myFunction(int i, char c)
{
std::cout << "the value of i is " << i << std::endl;
std::cout << "the value of c is " << c << std::endl;
}
이제 다른 코드에서 인수 두 개를 지정하여 myFunction()을 호출할 수 있다.
myFunction(8, 'a');
myFunction(someInt, 'b');
myFunction(5, someChar);
함수는 당연히 호출한 측으로 값을 리턴할 수 있다.
예를 들어 두 수를 더한 결과를 리턴하려면 다음과 같이 작성한다.
int addNumbers(int number1, int number2)
{
return number1 + number2;
}
이 함수를 호출하는 코드는 다음과 같이 작성한다.
int sum = addNumbers(5, 3);
함수 리턴 타입 추론 (auto)
C++14부터는 함수의 리턴 타입을 컴파일러가 알아서 지정할 수 있다.
이 기능을 적용하려면 다음과 같이 리턴 타입 자리에 auto 키워드를 적는다.
auto addNumbers(int number1, int number2)
{
return number1 + number2;
}
그러면 컴파일러는 return 문에 나온 표현식의 타입에 따라 리턴 타입을 추론한다.
함수 안에 return 문이 여러 개가 있을 수 있는데, 이때 각 타입은 모두 같아야 한다.
현재 함수 이름 (__func__)
함수마다 내부적으로 __func__라는 로컬 변수가 정의돼 있다.
이 변수는 현재 함수의 이름을 값으로 갖고 있으며, 주로 로그를 남기는 데 활용한다.
int addNumbers(int number1, int number2)
{
std::cout << "Entering function " << __func__ << std::endl;
return number1 + number2;
}
'💻프로그래밍 내용 정리 > C++17' 카테고리의 다른 글
[C++ 1.1.11] std::array (0) | 2022.08.15 |
---|---|
[C++ 1.1.10] C 스타일 배열, 영 초기화, 이니셜라이저 리스트, std::size(), sizeof (0) | 2022.08.15 |
[C++ 1.1.8] 논리 연산자(<, <=, >, >=, ==, !=, !, &&, ||), 단락 논리 (0) | 2022.08.15 |
[C++ 1.1.7] 조건문(if/else/switch), 이니셜라이저, 폴스루(fallthrough), 조건 연산자 (0) | 2022.08.15 |
[C++ 1.1.6] 상수와 타입(enum), 엄격한 타입(enum class(스트롱 타입)), 구조체(struct) (0) | 2022.08.15 |