C언어에서 return은 함수의 실행을 끝내고, 필요 시 동작 또는 결과 값을 호출한 곳으로 함께 전달한다.
리턴의 종류는 크게 4가지로 return,return 0,return -1,return n이다.
결과값이 없거나 0인 경우 종료, 0이 아닌 경우 에러 또는 특정 상태를 의미한다.
1.return 역할
모든 프로그램 언어들은 수행한 처리 결과를 전달할 수 있다.
수행한 처리 결과를 전달하는 때 사용하는 것이 return 이다.
return 구문을 활용하면 처리되는 곳의 상태와 값을 알 수 있다.
C언어 사용되는 return 구문의 종류는 반환값이 없는 경우와 있는 경우, 반환값이 0 인 경우와 0이 아닌 경우로 나눠진다.
2.프로그램 실행의 최소 단위 함수의 역할
C언어의 함수에 대해 잠깐 언급해 본다.
OOP와 같은 프로그램 언어들이 소개되면서 함수란 용어 보다는 메서드란 용어를 주로 사용하는데 뭐, 같은 말이다.
프로그램이 실행되는 최소단위로 보면 된다.
그런데, 함수를 공부하고 있다면 return 구문을 자주 보게 된다.
보통 처리 결과를 호출한 곳으로 되돌리는 역할을 하는 것이 return 구문인다.
여기서 의미하는 함수는 프로그램의 시작점인 main() 함수도 포함된다.
그렇다면 main() 은 return 구문을 어디로 되돌릴까 ?
윈도우 또는 리눅스와 같은 main함수를 실행한OS이다.
함수는 이 정도로 간단히 언급해 본다.
3.리턴의 종류
return 의 역할은 프로그램의 흐름을 넘기고, 실행한 결과에 대한 값을 전달한다고 언급했다.
보통의 처리결과는 4가지가 있다.
`종료(중단), 성공, 에러(실패), 사용자 지정`이다.
그럼에도 공통점은 처리를 중단한다는 점에 있다.
리턴 결과에 대한 코드와 내용은 프로그램을 제작한 곳마다 사람마다 다르다.
먼저 위에서 언급한 것에 대한 의미를 보자.
프로그램에서 언급하는 것은 좀 더 상세하게 나열 할 수 있다.
주목할 점은 여기에서 언급하는 함수는 프로그램 시작인 main() 함수도 포함된다.
- return
- 프로그램의 흐름의 단순 종료 또는 중단 - return 0
- 프로그램의 정상 / 완료 종료 또는 중단 - return -1
- 프로그램의 실패 / 에러 종료 또는 중단 - return n
- 프로그램의 상태 지정 / 사용자 정의 종료 또는 중단
4.코드예제
C언어의 return 문에 대한 간단한 코드 예제를 살펴보자.위에서 언급한 return 종류를 기준으로 코드를 작성하고 실행을 해 본다.
각 return 구문은 함수로 만들어 테스트를 해볼 것이다.
단, 함수에 의미가 없는 코드가 들어가 있을 것이다.
return 구문의 프로그램 흐름 중단을 위한 차이를 보여주기 위함이니 태클 노노여 ~
4.1.return 프로그램 흐름의 단순 종료/중단
C언어에서 return은 프로그램 흐름의 단순한 종료 또는 중단을 의미한다.
세미콜론을 포함한 `return;`으로 작성한다.
전달하는 값이 없기 때문에 조건의 상관 여부에 상관없이 작업을 끝낸다.
아래의 코드 중 함수 `CallResutn(void);`를 보면 알 수 있다.
#include <stdio.h>
/* 함수 선언 */
void CallReturn1(void);
/* 프로그램 시작 */
int main(void)
{
int result = 0;
printf("----- Start \n");
printf("\n");
/* 프로그램 단순 종료 */
CallReturn1();
printf("리턴 결과: 없음\n");
printf("\n");
printf("----- End \n");
/* 정상 종료 */
return 0;
}
void CallReturn1(void)
{
printf("----- 단순 종료 - 1\n");
return;
printf("----- 단순 종료 - 2\n");
}`CallReturn1(void)` 함수를 보면 return이 있다.
CallReturn1(void) 함수를 호출한 main() 함수에 처리 결과를 전달하는 값이 없으며,
main() 함수는 그저 함수의 작업이 끝이 났다는 정도만 처리하고 다음 코드를 진행할 것이다.
주목할 것은 의미없어 보이는 2번째 printf() 출력함수에 있다.
return 구문이 실행되면 다음 줄의 코드는 실행되지 않는다.
아래는 위의 코드에 대한 실행결과를 보여준다.
4.2.return 0 프로그램 흐름의 정상 종료
C언어에서 프로그램 종료시 굳이 `정상`이란 결과를 보내고자 할 때 사용하는 결과값은 0 으로 설정하며, return 문과 함께 사용할 때 `return 0`으로 표현한다.
`return 0` 함수 또는 프로그램 흐름이 정상적으로 처리되고 종료되었음을 의미한다.
#include <stdio.h>
/* 함수 선언 */
int CallReturn2(void);
/* 프로그램 시작 */
int main(void)
{
int result = 0;
printf("----- Start \n");
printf("\n");
/* 프로그램 정상 종료 */
result = CallReturn2();
printf("리턴 결과: %d\n", result);
printf("\n");
printf("----- End \n");
/* 정상 종료 */
return 0;
}
int CallReturn2(void)
{
printf("----- 정상 / 완료 종료 - 1\n");
return 0;
printf("----- 정상 / 완료 종료 - 2\n");
}아래는 정상 종료에 대한 `return 0`에 대한 실행 결과를 보여준다.
의미 없어 보이는 return 이후의 2번째 printf() 출력함수는 프로그램의 흐름이 종료되었기에 실행되지 않는다.
4.3.return -1 프로그램 흐름의 처리 실패
C언어의 함수 또는 프로그램의 흐름에 대해 에러 또는 실패한 경우 `return -1`을 명시하면 된다.
적절히 만들어진 코드는 보통 정상 종료겠지만, 그렇지 않은 경우들도 있기 때문.
프로그램 흐름 또는 함수의 흐름에 어떤 에러 또는 실패를 를 구분하고자 할 때 `return -1`을 사용한다.
#include <stdio.h>
/* 함수 선언 */
int CallReturn3(void);
/* 프로그램 시작 */
int main(void)
{
int result = 0;
printf("----- Start \n");
printf("\n");
/* 프로그램 실패/에러 종료 */
result = CallReturn3();
printf("리턴 결과: %d\n", result);
printf("\n");
printf("----- End \n");
/* 정상 종료 */
return 0;
}
int CallReturn3(void)
{
printf("----- 실패 / 에러 종료 - 1\n");
return -1;
printf("----- 실패 / 에러 종료 - 2\n");
}아래는 위의 코드에 대한 실행 결과이다.
처리 실패 또는 에러가 발생했을 때를 가정하여 `return -1`를 사용하였다.
이번에도 무의미한 2번째 printf() 함수를 사용하였다.
반복적 언급이지만, return 구문이 실행되면 이후 코드는 실행되지 않는다.
4.4.return n 프로그램 흐름의 사용자 정의
C언어의 처리 결과는 사용자 정의로써 전달할 수 있다.
사용자 정의는 개발자 또는 프로젝트 개발시 정해진 약속에 따른 어떤 규칙을 의미할 수 있다.
위에서 언급한 성공시 0, 실패시 -1 를 제외한 나머지 상태를 숫자로써 지정하여 사용하는 것이다.
1은 보통 특정 상태의 성공을 의미하고, 그 외 2 이상의 코드는 개발자 또는 프로젝트에 따라 숫자를 지정하여 규격화하여 사용할 수 있다.
#include <stdio.h>
/* 함수 선언 */
int CallReturn4(void);
/* 프로그램 시작 */
int main(void)
{
int result = 0;
printf("----- Start \n");
printf("\n");
/* 프로그램 사용자 정의 종료 */
result = CallReturn4();
printf("리턴 결과: %d\n", result);
printf("\n");
printf("----- End \n");
/* 정상 종료 */
return 0;
}
int CallReturn4(void)
{
printf("----- 조건 상태 / 사용자 정의 종료 - 1\n");
return 1;
printf("----- 조건 상태 / 사용자 정의 종료 - 2\n");
}일단, 사용자 정의로 `return 1`을 사용하면 보통 처리 성공을 의미할 것이다.
return 또는 return 0 을 사용하지 않고 특정 동작 또는 처리에 대한 성공적 처리 완료로써 의미를 부여하여 사용할 수 있다.
이번에도 의미없는 2번째 printf() 함수가 있으며, 아래는 위의 코드에 대한 처리 결과를 보여준다.
이번엔 다른 처리 결과에 대한 return 구문을 사용하는 방법이다.
만약, 어떤 처리 결과가 404라고 가정하자.
사용자 정의로 처리 결과를 단순히 전달하면 되기 때문에 `return 404`로 표현하면 된다.
아래는 return 404 에 대한 코드와 실행 결과를 보여준다.
#include <stdio.h>
/* 함수 선언 */
int CallReturn5(void);
/* 프로그램 시작 */
int main(void)
{
int result = 0;
printf("----- Start \n");
printf("\n");
/* 프로그램 사용자 정의 종료 */
result = CallReturn5();
printf("리턴 결과: %d\n", result);
printf("\n");
printf("----- End \n");
/* 정상 종료 */
return 0;
}
int CallReturn5(void)
{
printf("----- 조건 상태 / 사용자 정의 종료 - 1\n");
return 404;
printf("----- 조건 상태 / 사용자 정의 종료 - 2\n");
}return 404 를 사용자 정의 처리 결과로 사용하여 호출한 곳으로 전달한다.
처리 결과값은 404이다.
즉, `return 404 문장은 처리 종료 후 404 결과값을 호출한 곳으로 전달해라.`란 의미와 같다.
의미없어 보이는 두번째 printf() 함수는 return 문 이후에 있기 때문에 실행되지 않는다.
아래는 실행결과를 보여준다.
5.전체 코드
위의 코드들에 대한 전체 코드를 아래에 작성했다.
`return` 문의 목적은 프로그램의 흐름을 중단하는 것에 있다며 왜 중단되었는지에 대한 결과값을 전달할 수 있다.
프로그램 흐름의 대표적인 것은 함수이며, 지금의 OOP들의 경우 메서드일 것이다.
여기에서 말하는 함수와 메서드에는 프로그램의 시작점인 main() 함수도 포함된다.
main() 함수는 return 구문을 실행하며 프로그램을 전달하고 결과값을 전달하고자 할 때 OS에 전달할 것이다.
main() 함수에서 실행시킨 다른 함수들은 함수의 실행 종료와 결과값을 main()함수에 전달할 것이다.
return 의 결과값은 전달할 수도 있고, 안할 수도 있다.
구문은 다음과 같으며, `return, return 0, return -1, return n` 형식의 4가지를 사용한다.
이제 코드를 보자.
- 단순 종료: return
- 정상 종료: return 0
- 실패 종료: return -1
- 사용자 정의 종료: reutn n ( n : 1 ~ 정하기 나름 )
#include <stdio.h>
/* 함수 선언 */
void CallReturn1(void);
int CallReturn2(void);
int CallReturn3(void);
int CallReturn4(void);
int CallReturn5(void);
/* 프로그램 시작 */
int main(void)
{
int result = 0;
printf("----- Start \n");
printf("\n");
/* 프로그램 단순 종료 */
CallReturn1();
printf("리턴 결과: 없음\n");
printf("\n");
/* 프로그램 정상 종료 */
result = CallReturn2();
printf("리턴 결과: %d\n", result);
printf("\n");
/* 프로그램 실패/에러 종료 */
result = CallReturn3();
printf("리턴 결과: %d\n", result);
printf("\n");
/* 프로그램 사용자 정의 종료 */
result = CallReturn4();
printf("리턴 결과: %d\n", result);
printf("\n");
/* 프로그램 사용자 정의 종료 */
result = CallReturn5();
printf("리턴 결과: %d\n", result);
printf("\n");
printf("----- End \n");
/* 정상 종료 */
return 0;
}
void CallReturn1(void)
{
printf("----- 단순 종료 - 1\n");
return;
printf("----- 단순 종료 - 2\n");
}
int CallReturn2(void)
{
printf("----- 정상 / 완료 종료 - 1\n");
return 0;
printf("----- 정상 / 완료 종료 - 2\n");
}
int CallReturn3(void)
{
printf("----- 실패 / 에러 종료 - 1\n");
return -1;
printf("----- 실패 / 에러 종료 - 2\n");
}
int CallReturn4(void)
{
printf("----- 조건 상태 / 사용자 정의 종료 - 1\n");
return 1;
printf("----- 조건 상태 / 사용자 정의 종료 - 2\n");
}
int CallReturn5(void)
{
printf("----- 조건 상태 / 사용자 정의 종료 - 1\n");
return 404;
printf("----- 조건 상태 / 사용자 정의 종료 - 2\n");
}return 문 뒤에 의미없어 보이는 printf() 함수들이 보인다.
당연히 return 문에서 프로그램 흐름이 종료되었기 때문에 실행되지 않는다.
이것을 굳이 작성한 이유는 아래의 실행 결과에서 볼 수 있다.
6.실행 결과
위의 전체 코드에 대한 실행결과는 다음과 같다.
return 문을 사용하여 함수를 포함한 프로그램의 흐름을 중단/종료 하는 것을 확인할 수 있다.
그리고, 처리 상태에 따라 결과값이 없거나 있는 경우 또한 확인할 수 있다.







댓글
댓글 쓰기