C++에서 해결 제어가 비보이드 함수 오류 끝에 도달함

Jinku Hu 2023년10월12일
  1. 함수 본문 끝에return 문 사용
  2. 함수 본문의 각 코드 경로 끝에return 문 사용
C++에서 해결 제어가 비보이드 함수 오류 끝에 도달함

이 기사에서는 제어를 해결하는 여러 방법이 무효가 아닌 함수 오류 C++의 끝에 도달하는 방법을 설명합니다.

함수 본문 끝에return 문 사용

반환 유형을 가지려면 void가 아닌 함수가 필요합니다. 따라서 함수에는 해당 유형의 객체를 반환하는 문이 있어야합니다. 특정 컴파일러 플래그가 전달되면 이러한 유형의 오류 또는 경고가 완전히 억제 될 수 있으며, 프로그램에서 지정된 함수가 호출되면 런타임 오류가 발생합니다.

다음 예제 코드에는 문자열에 대한 참조를 가져와 문자열 값을 반환하는reverseString 함수가 정의되어 있습니다. 함수 본문을 살펴보면return 문이 없습니다. reverseString이 호출자 함수에 인수를 전달하지 않더라도 컴파일러는 경고 메시지 만 표시하고 실행 프로그램은 어쨌든 빌드됩니다. 함수가 호출되면 제어 흐름이 분할 오류로 이어질 가능성이 높습니다.

#include <algorithm>
#include <iostream>
#include <iterator>

using std::cout;
using std::endl;
using std::reverse;
using std::string;

string reverseString(string &s) { string rev(s.rbegin(), s.rend()); }

int main() {
  string str = "This string is arbitrary";
  int cond = -1;

  cout << str << endl;
  cout << reverseString(str, cond) << endl;

  return EXIT_SUCCESS;
}

함수 본문의 각 코드 경로 끝에return 문 사용

제어가 void가 아닌 함수의 끝에 도달하는 또 다른 시나리오는 조건 블록이 모든 경로에 return문을 갖지 않는 경우입니다. 따라서 비 void 함수의 실행이 분기되고 if문이 가능한 모든 경로를 포함하지 않는 경우 함수 본문 끝에 명시적인 return호출이 있어야합니다.

다음 예제는 반환 값을 호출자 함수에 전달하는 두 개의 조건부 경로가있는 문자열 조작 함수를 보여줍니다. 그러나 일부 경우는 주어진 조건에 대해 평가되지 않은 채로 남아 있으며 이는 제어 흐름이 기능 블록의 끝에 도달하여 런타임 오류를 일으킬 수 있음을 의미합니다.

#include <algorithm>
#include <iostream>
#include <iterator>

using std::cout;
using std::endl;
using std::reverse;
using std::string;

string reverseString(string &s, int condition) {
  if (condition == -1) {
    string rev(s.rbegin(), s.rend());
    return s;
  } else if (condition == 0) {
    return s;
  }
}

int main() {
  string str = "This string is arbitrary";
  int cond = -1;

  cout << str << endl;
  cout << reverseString(str, cond) << endl;

  return EXIT_SUCCESS;
}

아래 경고가 표시될 수 있습니다.

Main.cpp:15:1: warning: non-void function does not return a value in all control paths [-Wreturn-type]
}
^
1 warning generated.
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

관련 문장 - C++ Function