C++의 함수 내에서 함수 호출
이 기사에서는 C++의 함수 내에서 함수를 호출하는 방법에 대한 몇 가지 방법을 설명합니다.
C++의 단계별 함수 호출 메커니즘
함수를 호출하려면 로컬 범위에있는 인수의 값을 계산해야합니다. 일반적으로 함수 본문에 관련된 지역 변수가 있기 때문에 스택 프레임이라고하는 새로운 메모리 공간이 필요합니다. 함수 인수는 해당 이름으로 복사 또는 참조되며 캐스트 조작이 포함 된 경우 변환됩니다. 이전 단계가 완료되면return
이 발생할 때까지 기능 블록의 명령문이 실행됩니다. return
문은 제어 흐름이 호출 함수로 반환되도록합니다. 이 시점에서 자동으로 할당 된 스택 프레임은 삭제되고 호출자 코드에서 제어가 계속됩니다.
함수에는 호출자 코드에 전달되어야하는 객체 유형을 정의하는 반환 유형이 있습니다. 값을 반환하지 않고void
유형으로 표시되는 함수를 가질 수 있습니다. 함수에 유효한 반환 유형이있는 경우 다음 예제 코드에 설명 된대로 여러 함수 호출을 연결할 수 있습니다. 내부addTwoInts
가 먼저 실행되고 반환 된 값이 인수 중 하나로 외부addTwoInts
에 전달됩니다.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int addTwoInts(int i, int j) { return i + j; }
int main() {
cout << "2 + 1 + -3 = " << addTwoInts(addTwoInts(2, 1), -3) << endl;
cout << "(10 + 10) + (11 + -11) = "
<< addTwoInts(addTwoInts(10, 10), addTwoInts(11, -11)) << endl;
cout << "(12 + -9) + 10) + -11) = "
<< addTwoInts(addTwoInts(addTwoInts(12, -9), 10), -11) << endl;
return EXIT_SUCCESS;
}
return
문을 사용하여 C++의 함수 내에서 함수 호출
함수 내에서 함수를 호출하는 또 다른 유용한 방법은return
문을 사용하는 것입니다. 하지만 호출 된 함수는이 표기법에 맞는 반환 값을 가져야하거나 컴파일하지 않아야합니다. 또한 다음 예제 코드에서와 같이return
문 다음의 유일한식이 호출 수신자 함수 인 경우 호출 함수는 동일한 반환 유형을 가져야합니다.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int addTwoInts(int i, int j) { return i + j; }
int multiplyAccumulate(int i, int j) { return addTwoInts(i, i * j); }
int main() {
cout << "multiplyAccumulate(1,2) = " << multiplyAccumulate(2, 2) << endl;
return EXIT_SUCCESS;
}
std::pair
를 사용하여 C++의 함수에서 두 값을 반환합니다
함수가 호출자에게 여러 값을 반환하는 데 적합한 시나리오가 있습니다. 이러한 경우std::pair
구조를 사용하여 해당 데이터 멤버에 각 요소를 저장하고 값을 전달할 수 있습니다. 주어진 문제에 대해 충분한 기능을 제공하는 배열 또는 STL 컨테이너에 대한 포인터를 사용하여 더 많은 요소를 전달할 수 있습니다.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
std::pair<int, int> findMaxMin(vector<int> &arr) {
std::pair<int, int> ret;
auto max = std::max_element(arr.begin(), arr.end());
auto min = std::min_element(arr.begin(), arr.end());
ret.first = arr.at(std::distance(arr.begin(), max));
ret.second = arr.at(std::distance(arr.begin(), min));
return ret;
}
int main() {
vector<int> array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
auto ret = findMaxMin(array);
cout << "Maximum element is " << ret.first << ", Minimum is " << ret.second
<< endl;
return EXIT_SUCCESS;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook