컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
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 을 반환하며 끝내는 것이 보통입니다. 그러면 그 함수를 호출한 곳에서, 그 함수가 제대로 실행되었는지 판단할 수가 있습니다.



#include <stdio.h>

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;
}



▶▶ C언어] return 0; return 1; return -1; 의 뜻 의미, 사용법 예제




tag: cpp
C언어 | C/C++ (Visual C++) 프로그래밍

7 Comments:
At August 22, 2006 at 1:27 AM, Anonymous Anonymous said...

후배가 제어문 루프를 돌리다가(bsd socket의 accept였던가 그럴꺼에요..) 빠져나갈 때 return;를 사용하길래...
"왜 이렇게 쓰냐?"고 했더니 책에 다들 그렇게 돼어 있던데요..하길래 몇 권 보니깐 그렇게 된 게 있더군요...물론 그 함수는 void 형이었고요...java에서도 그렇게 하는게 보이던데...강제성을 가지지 않는 건지? 아니면 return;이란게 반환값이 없는 것과 같은건가요?

 
At August 22, 2006 at 10:31 AM, Blogger mwultong said...

그냥 return;이라고 하면 반환값 없이 함수가 강제로 종료되어 버립니다..

void형 함수를 종료시키려면, return; 을 쓰시면 됩니다.

(∩_∩)

 
At October 19, 2006 at 1:31 PM, Anonymous Anonymous said...

main() {}
가장 간단한 프로그램.

 
At October 19, 2006 at 2:34 PM, Blogger mwultong said...

아 그렇군요
main() {}
이것이 가장 간단한 프로그램이지요

(∩_∩)

 
At October 24, 2015 at 8:45 PM, Blogger Unknown said...

수고하셨습니당

 
At December 15, 2019 at 2:47 PM, Blogger 학생1 said...

C언어 처음 공부하는 학생입니다. void설명하실때 "결과값이 없다'는게 무슨 말인가요?

 
At December 15, 2019 at 6:54 PM, Blogger mwultong said...


기본적으로 모든 함수는 원래 어떤 값을 반환하게 되는데,
void형 함수는 값을 반환하지 않는다는 뜻입니다.

그렇다고 void형 함수가 어렵거나 특별한 함수는 아닙니다.


보통의 함수는 예를 들어
1+1의 값을 계산해서 결과값인 2를 반환합니다.


void형 함수는 어떤 값을 반환하지 않고,
주로 어떤 '일'을 하고 끝나게 됩니다. 가령 화면에 '안녕하세요' 등의 문자열을 출력하는 일 등.

 

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top