반도체/C++

23. 반환값

Clair_de_Lune 2024. 8. 14. 13:31
728x90

C++에서 함수의 반환값(return value)은 함수가 실행된 후 호출자에게 전달되는 값을 의미합니다. 반환값은 함수의 목적이나 동작 결과를 나타내며, 함수가 어떤 작업을 수행했는지를 호출자에게 알리는 중요한 역할

1. 반환값의 기본 개념

  • 형식: 함수의 반환값은 함수의 선언에서 지정된 데이터 타입에 따라 다릅니다. 예를 들어, int, double, void 등 다양한 타입을 가질 수 있습니다.
  • 반환값 사용: 함수가 실행을 마친 후, return 문을 사용하여 값을 반환합니다.

2. 반환값의 예

기본적인 반환값

다음은 정수 값을 반환하는 간단한 함수의 예입니다.

int add(int a, int b) {
    return a + b; // 두 수의 합을 반환
}

int main() {
    int result = add(3, 5); // add 함수 호출
    std::cout << "Result: " << result << std::endl; // 결과 출력
    return 0;
}

위의 예에서 add 함수는 두 개의 정수를 인자로 받아서 그 합을 반환합니다. main 함수에서 add를 호출하고 반환된 값을 result에 저장하여 출력합니다.

여러 개의 반환값

C++는 기본적으로 함수에서 하나의 값을 반환할 수 있지만, 여러 값을 반환해야 할 경우 std::pair, std::tuple, 구조체 또는 클래스를 사용할 수 있습니다.

#include <utility> // std::pair 사용을 위한 헤더

std::pair<int, int> minMax(int a, int b) {
    return std::make_pair((a < b) ? a : b, (a > b) ? a : b); // 최소값과 최대값을 반환
}

int main() {
    auto result = minMax(3, 7);
    std::cout << "Min: " << result.first << ", Max: " << result.second << std::endl;
    return 0;
}

위의 예제에서는 std::pair를 사용하여 두 개의 값을 한 번에 반환합니다. minMax 함수는 최소값과 최대값을 계산하여 반환하고, 호출하는 쪽에서는 first와 second를 통해 값을 사용할 수 있습니다.

3. 반환값이 없는 경우

함수가 값을 반환하지 않는 경우, 반환 타입을 void로 지정합니다. 이 경우 함수는 작업을 수행하지만 결과를 호출자에게 전달하지 않습니다.

void printMessage() {
    std::cout << "Hello, World!" << std::endl; // 메시지를 출력하지만 반환값은 없음
}

int main() {
    printMessage(); // 함수 호출
    return 0;
}

4. 반환값의 유효성

반환값의 유효성에 주의해야 합니다. 지역 변수를 반환할 경우, 해당 변수가 소멸될 수 있기 때문에 문제가 발생할 수 있습니다.

int* returnPointer() {
    int localVar = 10;
    return &localVar; // 위험: localVar는 함수가 종료되면 소멸됨
}

int main() {
    int* ptr = returnPointer(); // ptr은 유효하지 않음
    std::cout << *ptr << std::endl; // 정의되지 않은 동작
    return 0;
}

위의 예제에서 returnPointer 함수는 지역 변수의 주소를 반환하지만, 함수가 종료된 후 해당 변수는 소멸되므로 ptr을 통해 접근하면 정의되지 않은 동작이 발생합니다.

요약

  • 반환값은 함수가 작업을 수행한 결과를 나타내며, 호출자에게 전달됩니다.
  • 반환 타입은 함수 선언에서 지정하며, void는 반환값이 없음을 의미합니다.
  • 여러 값을 반환하고 싶다면 std::pair, std::tuple, 구조체 등을 사용할 수 있습니다.
  • 지역 변수를 반환할 경우 유효성에 주의해야 합니다.
728x90