반환값(Return Value)란?

함수가 처리를 마치고 호출한 곳으로 돌려주는 값. 의사 코드에서는 return 뒤에 쓴 식의 값이 반환값이 되며, return을 실행한 시점에서 함수의 처리는 끝난다.

일본어 명칭: 戻り値

반환값(Return Value)은(는) 프로그래밍의 기초(의사 코드 트레이스), ISA와 어셈블리, 링커, 로더, 실행 파일 등 6개 분야의 연습 문제 13개에 나와요.

분야: 프로그래밍의 기초(의사 코드 트레이스)

도전해 보기: 반환값(Return Value) 관련 문제

RISC-V의 표준 호출 규약에서 정수 인자와 반환값을 전달하는 데 사용하는 레지스터로 올바른 것은?

  1. A인자는 s0~s7, 반환값은 ra
  2. B인자는 a0~a7, 반환값은 a0(와 a1)
  3. C인자는 모두 스택, 반환값은 sp
정답과 해설 보기

정답: B. 인자는 a0~a7, 반환값은 a0(와 a1)

RISC-V의 표준 호출 규약에서는 정수 인자를 최대 8개까지 a0~a7(x10~x17)에 넣어 전달하고, 반환값은 a0에, RV32에서의 64비트 값 등은 a0와 a1 두 개에 넣어 돌려줍니다. 메모리보다 빠른 레지스터로 주고받으므로 함수 호출의 부담이 작아집니다. 8개를 넘는 인자는 스택에 둡니다. 부동소수점 인자는 fa0~fa7을 사용합니다.

함수 f(x, y)를 'y가 0이면 x를 반환하고, 그렇지 않으면 f(y, x mod y)를 반환한다'로 정의한다. f(84, 36)을 호출했을 때의 반환값과, f가 호출되는 횟수(첫 호출 포함)의 조합은?

  1. A반환값 12, 호출 횟수 3회
  2. B반환값 12, 호출 횟수 4회
  3. C반환값 6, 호출 횟수 3회
정답과 해설 보기

정답: A. 반환값 12, 호출 횟수 3회

f(84, 36)은 84 mod 36 = 12이므로 f(36, 12)를 호출하고, 36 mod 12 = 0이므로 f(12, 0)을 호출하며, y가 0이므로 12를 반환합니다. 호출은 f(84, 36), f(36, 12), f(12, 0)의 3회이며, 이는 유클리드 호제법에 의한 최대공약수 계산입니다. 이 함수는 재귀 호출의 결과를 그대로 반환하는 꼬리 재귀이므로, 컴파일러가 꼬리 호출 최적화를 수행하면 루프로 변환할 수 있어, 호출이 깊어져도 스택을 계속 소비하지 않습니다.

해설 속 반환값(Return Value)

반환값(Return Value)이(가) 나오는 문제 (13)

  1. RISC-V의 표준 호출 규약에서 정수 인자와 반환값을 전달하는 데 사용하는 레지스터로 올바른 것은?
  2. 함수 f(x, y)를 'y가 0이면 x를 반환하고, 그렇지 않으면 f(y, x mod y)를 반환한다'로 정의한다. f(84, 36)을 호출했을 때의 반환값과, f가 호출되는 횟수(첫 호출 포함)의 조합은?
  3. ÷는 나눗셈이며, 정수형 변수(인수 포함)에 대입할 때는 소수점 이하를 버린다. 다음 함수 f를 f(9087)로 호출했을 때의 반환값은?
  4. ÷는 나눗셈이며, 정수형 변수(인수 포함)에 대입할 때는 소수점 이하를 버린다. 다음 함수 toBin을 toBin(12)로 호출했을 때의 반환값은?
  5. 다음 함수 s를 s(7)로 호출했을 때의 반환값은?
  6. 다음 함수 fib를 fib(10)으로 호출했을 때의 반환값은?
  7. 위의 함수 f를 3번 연속으로 호출했을 때, 세 번째 반환값으로 올바른 것은?
  8. 호출 규약(콜링 컨벤션)이 정해져 있는 주된 목적은?
  9. 프로그램의 오류 중 컴파일 시점에 발견할 수 있는 것은?
  10. C 언어 프로그램에서 OS가 처음 실행을 시작하는 주소(엔트리 포인트)에 대해 올바른 것은 무엇입니까?
  11. C 언어의 main 함수가 'return 3;'으로 끝났을 때, 그 값 3은 일반적으로 어떻게 됩니까?
  12. ÷는 나눗셈이며, 정수형 변수(인수 포함)에 대입할 때는 소수점 이하를 버린다. 다음 함수 pow를 pow(2, 10)으로 호출했을 때, pow가 호출되는 횟수(최초 호출 포함)는?
  13. 다음 함수 c를 c(4, 2)로 호출했을 때, c가 호출되는 횟수(최초 호출 포함)는?

관련 용어

스택(Stack) 변수(Variable) 인수(Argument) 재귀(Recursion) 호출 규약(Calling Convention) 정수 나눗셈(Integer Division) ABI(애플리케이션 바이너리 인터페이스) 구문 분석(Parsing) 엔트리 포인트(Entry Point) 링커(linker)

용어집으로 돌아가기