Saturday, July 15, 2006
C언어 기초] return 이란? 함수인가요? return 0; 의 의미는?
return 은 함수가 아니라, C언어의 키워드(keyword) 즉 "예약어"입니다. C언어에서는 뒤에 소괄호"()"가 없으면 함수가 아닙니다. (▶▶ "[C언어] C언어와 C++의 예약어 리스트; Keywords" 참조)
(참고로, 펄(Perl)의 함수에서는 소괄호를 생략할 수 있음)
return 은, 현재 있는 함수에서 빠져나가며, 그 함수를 호출했던 곳으로 되돌아 가라는 뜻입니다. 되돌아 가면서 그 함수를 호출했던 곳 즉 calling routine 에 어떤 값을 반환하는 것입니다.
return 0; 는 0 이라는 값을 반환하라는 의미이고
return 1; 은 1 이라는 값을 반환하라는 뜻입니다.
return 은 함수의 어떤 곳에서도 위치할 수 있는데, return 이 실행되는 즉시 그 함수는 무조건 실행이 종료됩니다.
즉, 현재의 함수에서 빠져 나가라는 의미입니다.
* 그 함수가 무엇을 계산하는 함수라면, 그 계산 결과의 값을 return 으로 반환합니다.
* 계산이 아닌, 어떤 일을 하는 함수라면, 그 일이 성공했을 때에는 0 을, 실패했을 때에는 1 을 반환하며 끝내는 것이 보통입니다. 그러면 그 함수를 호출한 곳에서, 그 함수가 제대로 실행되었는지 판단할 수가 있습니다.
위의 예제는, 지구상에서 가장 단순한 C프로그램입니다. 그냥 하하하하 라는 문자열을 명령 프롬프트 화면에 출력하는 것이 전부입니다.
puts() 함수에서 에러가 나는 경우는 사실상 없고, 그래서 성공적으로 프로그램이 실행되었기에, return 0; 이라고 끝났습니다. main() 함수에서 빠져나가면서 정수 0 을 반환하라는 의미입니다. main() 함수는 프로그램 그 자체이므로, main() 함수에서 빠져나간다는 것은, 그 프로그램을 종료시킨다는 의미입니다. main() 함수를 호출한 루틴은, 컴퓨터 OS 그 자체이므로, 결국 OS에 0 이라는 값을 반환하는 것입니다. 이것을 도스/윈도우에서는 "Error Level" 이라고 합니다. 윈도의 명령 프롬프트에서,
echo %ERRORLEVEL%
이라고 치면, return이 방금 반환한 그 값을 볼 수 있습니다. 이 경우에는 0 이라는 값이 화면에 출력됩니다. 그런데 %ERRORLEVEL% 은, 어떤 명령어나 프로그램의 실행이 종료될 때마다 값이 자동으로 변경됩니다. (▶▶ "[배치 파일] 프로그램 실행의 성공 여부를 Error Level 로 확인/판단하기: ERRORLEVEL" 참조)
※ 단, 윈도98에서는 echo %ERRORLEVEL% 이 작동하지 않습니다. 윈도2000 이상의 OS에서만 됩니다.
main() 앞에 int 라고 함수형이 정의되어 있는데, 이것은 main()이 return 을 사용해 반환하는 값이 '정수'라는 의미입니다.
만약 void main()... 이라고 되어 있다면, "void"는 "아무것도 없다"는 뜻이기에, 결과값이 없다는 뜻이고, 그래서 return 문으로 결과값을 반환할 수 없는 것이 원칙입니다. 억지로 return 문을 사용한다면 "warning C4098: 'main' : 'void' function returning a value (반환값이 없는 함수인 main이 어떤 값을 반환했음)" 이런 경고가 나옵니다. 그래도 컴파일은 되지만 이런 경고를 고치지 않으면 나중에 버그투성이의 프로그램이 될 가능성이 높아집니다.
업데이트:
void 형 함수에서도 return; 을 쓸 수 있습니다. 아무것도 반환하지 않는 return; 즉, 단지 함수를 종료시키기 위한 return; 이라면 됩니다. 이 부분에 대한 설명이 누락되었는데 이상곤님께서 지적해 주셔서 방금 업데이트했습니다 ^^;
예제:
▶▶ C언어] return 0; return 1; return -1; 의 뜻 의미, 사용법 예제
(참고로, 펄(Perl)의 함수에서는 소괄호를 생략할 수 있음)
return 은, 현재 있는 함수에서 빠져나가며, 그 함수를 호출했던 곳으로 되돌아 가라는 뜻입니다. 되돌아 가면서 그 함수를 호출했던 곳 즉 calling routine 에 어떤 값을 반환하는 것입니다.
return 0; 는 0 이라는 값을 반환하라는 의미이고
return 1; 은 1 이라는 값을 반환하라는 뜻입니다.
return 은 함수의 어떤 곳에서도 위치할 수 있는데, return 이 실행되는 즉시 그 함수는 무조건 실행이 종료됩니다.
즉, 현재의 함수에서 빠져 나가라는 의미입니다.
* 그 함수가 무엇을 계산하는 함수라면, 그 계산 결과의 값을 return 으로 반환합니다.
* 계산이 아닌, 어떤 일을 하는 함수라면, 그 일이 성공했을 때에는 0 을, 실패했을 때에는 1 을 반환하며 끝내는 것이 보통입니다. 그러면 그 함수를 호출한 곳에서, 그 함수가 제대로 실행되었는지 판단할 수가 있습니다.
#include <stdio.h>
int main() {
puts("하하하하");
return 0;
}
int main() {
puts("하하하하");
return 0;
}
위의 예제는, 지구상에서 가장 단순한 C프로그램입니다. 그냥 하하하하 라는 문자열을 명령 프롬프트 화면에 출력하는 것이 전부입니다.
puts() 함수에서 에러가 나는 경우는 사실상 없고, 그래서 성공적으로 프로그램이 실행되었기에, return 0; 이라고 끝났습니다. main() 함수에서 빠져나가면서 정수 0 을 반환하라는 의미입니다. main() 함수는 프로그램 그 자체이므로, main() 함수에서 빠져나간다는 것은, 그 프로그램을 종료시킨다는 의미입니다. main() 함수를 호출한 루틴은, 컴퓨터 OS 그 자체이므로, 결국 OS에 0 이라는 값을 반환하는 것입니다. 이것을 도스/윈도우에서는 "Error Level" 이라고 합니다. 윈도의 명령 프롬프트에서,
echo %ERRORLEVEL%
이라고 치면, return이 방금 반환한 그 값을 볼 수 있습니다. 이 경우에는 0 이라는 값이 화면에 출력됩니다. 그런데 %ERRORLEVEL% 은, 어떤 명령어나 프로그램의 실행이 종료될 때마다 값이 자동으로 변경됩니다. (▶▶ "[배치 파일] 프로그램 실행의 성공 여부를 Error Level 로 확인/판단하기: ERRORLEVEL" 참조)
※ 단, 윈도98에서는 echo %ERRORLEVEL% 이 작동하지 않습니다. 윈도2000 이상의 OS에서만 됩니다.
main() 앞에 int 라고 함수형이 정의되어 있는데, 이것은 main()이 return 을 사용해 반환하는 값이 '정수'라는 의미입니다.
만약 void main()... 이라고 되어 있다면, "void"는 "아무것도 없다"는 뜻이기에, 결과값이 없다는 뜻이고, 그래서 return 문으로 결과값을 반환할 수 없는 것이 원칙입니다. 억지로 return 문을 사용한다면 "warning C4098: 'main' : 'void' function returning a value (반환값이 없는 함수인 main이 어떤 값을 반환했음)" 이런 경고가 나옵니다. 그래도 컴파일은 되지만 이런 경고를 고치지 않으면 나중에 버그투성이의 프로그램이 될 가능성이 높아집니다.
업데이트:
void 형 함수에서도 return; 을 쓸 수 있습니다. 아무것도 반환하지 않는 return; 즉, 단지 함수를 종료시키기 위한 return; 이라면 됩니다. 이 부분에 대한 설명이 누락되었는데 이상곤님께서 지적해 주셔서 방금 업데이트했습니다 ^^;
예제:
#include <stdio.h>
void main() {
return;
}
void main() {
return;
}
▶▶ C언어] return 0; return 1; return -1; 의 뜻 의미, 사용법 예제
tag: cpp
C언어 | C/C++ (Visual C++) 프로그래밍
후배가 제어문 루프를 돌리다가(bsd socket의 accept였던가 그럴꺼에요..) 빠져나갈 때 return;를 사용하길래...
"왜 이렇게 쓰냐?"고 했더니 책에 다들 그렇게 돼어 있던데요..하길래 몇 권 보니깐 그렇게 된 게 있더군요...물론 그 함수는 void 형이었고요...java에서도 그렇게 하는게 보이던데...강제성을 가지지 않는 건지? 아니면 return;이란게 반환값이 없는 것과 같은건가요?
그냥 return;이라고 하면 반환값 없이 함수가 강제로 종료되어 버립니다..
void형 함수를 종료시키려면, return; 을 쓰시면 됩니다.
(∩_∩)
main() {}
가장 간단한 프로그램.
아 그렇군요
main() {}
이것이 가장 간단한 프로그램이지요
(∩_∩)
수고하셨습니당
C언어 처음 공부하는 학생입니다. void설명하실때 "결과값이 없다'는게 무슨 말인가요?
기본적으로 모든 함수는 원래 어떤 값을 반환하게 되는데,
void형 함수는 값을 반환하지 않는다는 뜻입니다.
그렇다고 void형 함수가 어렵거나 특별한 함수는 아닙니다.
보통의 함수는 예를 들어
1+1의 값을 계산해서 결과값인 2를 반환합니다.
void형 함수는 어떤 값을 반환하지 않고,
주로 어떤 '일'을 하고 끝나게 됩니다. 가령 화면에 '안녕하세요' 등의 문자열을 출력하는 일 등.
<< Home