C 에서 return 0; 이라고 하는 이유가 뭔가요?

minamino의 이미지

굉장히 기초적인 질문이라서 검색해서 끝낼려고 했지만;;

return 0;, return, 리턴 어느것으로 검색해서 결과가 너무 많아서;;

부득이하게 게시물을 남깁니다.

대개 int main(void) { 내용 .. return 0; } 으로 끝내는데요.

왜 return 1; 이 아니라 return 0; 인가요

0 은 false 가 아닌지? 잘 실행되었으니 true 값인 1 을 반환하는 게 아닌가요?

C 에 워낙 초보라서;;;

그럼 답변 부탁드립니다 (__)

pynoos의 이미지

다른 많은 프로그램이 0 을 정상으로 돌리기 때문입니다.

그 값은 $? 값으로 확인됩니다.

ls .
echo $?

ls xxxx
echo $?

advanced의 이미지

return 0;

쉘에 반환되는값은 0 이 TRUE 입니다.

0 외의 값은 에러 코드입니다.

http://kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/exitcodes.html#EXITCODESREF

를 참조 하세요

- Advanced -

w0rm9의 이미지

true or false 의 의미가 아니라
숫자 0의 의미 아닌가요??

return 0;

리턴할 값이 없다. -_-;;;;
:oops: :oops: :oops: :oops:

배우고 때때로 익히면, 또한 즐겁지 아니한가?

익명 사용자의 이미지

그렇게치면
0도 값 아닌가요 ㅋㅋ

sunyzero의 이미지

일반적으로 함수가 의미하는 바에 따라서 리턴값이 달라집니다.

1. boolean계열의 의미를 지니는 경우는 1일 TRUE이고 0이 FALSE인 경우가 많습니다.

2. 여러가지 integer값을 반환하는 경우는 0이 TRUE음수가 FALSE양수가 특정 상태를 반환하는경우가 종종 있습니다.

일반적인 경우입니다. memcmp()나 isdigit()같이 비교해보면 쉽게 이해가 가실런지?

========================================
* The truth will set you free.

sangheon의 이미지

int foobar(char *)
{
    return 0;  // 에러 없음
}


if (foobar(s))
{
    에러처리
}

에러가 있을 때 1을 반환하고, 없을 때 0을 반환하면 == 연산을 사용하지 않을 수 있습니다.

--

Minimalist Programmer

MasterQ의 이미지

보통 return이 0이면 정상 종료했다는 뜻으로 쓰이지요...

김충길의 이미지

저도 0을 정상으로 많이 처리합니다. 왜나하면 정상은 한가지 경우이지만
에러인 경우는 여러가지 코드로 사용할 수 있잖아요.

0이외는 에러이고 그 값은 해당 에러의 에러 코드로..

screen + vim + ctags 좋아요~

cedar의 이미지

ANSI C++ 표준에 따르면,
int main()에서 return 0;는 안써도 됩니다.
즉,

int main(void) 
{ 
  내용 .. 
  return 0; 
} 

대신, 그냥
int main(void) 
{ 
  내용 .. 
} 

로 써도 됩니다.
jemiro의 이미지

하지만 ANSI C에서는
return 0; 를 명시하는것이 맞습니다.

그리고 c++ 에서도 main에서 return;을 생략할려면,
int main(void) 가 아니라.
void main(void)를 사용해야 겠지요?
int main()과 같이 리턴 타입을 int로 선언했으면,
return에 정수를 넘겨주어야 하는게 정확한 사용일테니 까요.
자바에서도 public static void main() 으로 선언하죠?

제가 보기에는 안해도 된다가 좋은것이 아니라,
할것 제대로 해주는것이 중요하다고 봅니다.
개인적으로 C++의 느슨한 문법으로 짜논
C코드를 정말 싫어합니다.

cedar wrote:
ANSI C++ 표준에 따르면,
int main()에서 return 0;는 안써도 됩니다.
즉,
int main(void) 
{ 
  내용 .. 
  return 0; 
} 

대신, 그냥
int main(void) 
{ 
  내용 .. 
} 

로 써도 됩니다.
맹고이의 이미지

jemiro wrote:
그리고 c++ 에서도 main에서 return;을 생략할려면,
int main(void) 가 아니라.
void main(void)를 사용해야 겠지요?
int main()과 같이 리턴 타입을 int로 선언했으면,
return에 정수를 넘겨주어야 하는게 정확한 사용일테니 까요.
자바에서도 public static void main() 으로 선언하죠?

cedar 님 말씀대로 ANSI/ISO C++ 에 int main()에 한해서는
return을 안적어도 되는걸로알고있는데요..
물론 적어주는게 형식상으론 정확하겠지만요..

jemiro wrote:
개인적으로 C++의 느슨한 문법으로 짜논
C코드를 정말 싫어합니다.

근데 C++이 더 느슨한건가요? 딴지걸려는게 아니라
전 C++이 타입체킹등등.. 더 엄격한줄 알고있었거든요
cedar의 이미지

jemiro wrote:

그리고 c++ 에서도 main에서 return;을 생략할려면,
int main(void) 가 아니라.
void main(void)를 사용해야 겠지요?
int main()과 같이 리턴 타입을 int로 선언했으면,
return에 정수를 넘겨주어야 하는게 정확한 사용일테니까요.

아닙니다. 잘못 알고 계시네요.
C++에서는 아예 void main()은 비호환 구문으로 정의하고
쓰지 말것을 권고합니다.
그리고 C에서는 함수 정의할 때 리턴값을 명시하지 않으면 int지만,
C++에서는 이러한 암시적인 int도 쓰지 않아야 합니다.
즉, C++ 표준에 맞는 main() 정의는 다음 두 가지 뿐입니다.
int main()
{
   ...
}


int main(int argc, char* argv[])
{
   ...
}

그리고 return 0;를 쓰지 않는 것은,
return 없이 main()을 종료하면 성공적인 종료이고,
0외의 다른 값을 return하면 실패한 것으로 정의한 겁니다.

jemiro wrote:

자바에서도 public static void main() 으로 선언하죠?

갑자기 뜬금없는 자바는 왜 튀어나옵니까?
자바는 겉모양만 C++과 닮았을 뿐, 내부는 Smalltalk과 유사한 언어입니다.
자바는 "Hello, World"를 위해서 public과 static, 즉 class와 namespace의 의미를 알아야 하는 난해한 언어죠.

jemiro wrote:

제가 보기에는 안해도 된다가 좋은것이 아니라,
할것 제대로 해주는것이 중요하다고 봅니다.
개인적으로 C++의 느슨한 문법으로 짜논
C코드를 정말 싫어합니다.

글쎄요, 느슨하기는 C가 더 느슨하지 않나요?
함수 원형을 반드시 선언하지 않아도 된다든지 하는 것들 말이죠.
C++은 그 외에도 형 검사를 매우 엄격하게 하지요.

대체 뭐가 느슨하다는거죠?
예를 들어, 변수 정의를 임의의 위치에 할 수 있는 것이요?
그건 아무데나 내키는 대로 하라는 의미가 아니라,
변수는 사용하기 직전에 정의해야 한다는 겁니다.
이것은 프로그램의 가독성과 성능 향상을 위한 겁니다.
C에서 이렇게 하려면 항상 지저분하게 블럭({})을 새로 만들고 정의했어야 했죠.

dictions의 이미지

함수에서와 같이 프로그램에서도 리턴값이 있습니다.
함수는 넘긴 main에서 값을 넘길때는 Argument라고 하고
함수에서 그 값을 받아 쓸때는 Parameter라고 하지요?
이 값을 받아서 계산하고 그 결과를 return합니다.
이 경우 두가지를 생각 해 볼 수 있는데

어떤 값을 리턴하는 것과 참 거짓 여부를 리턴 하는 것입니다.
값을 리턴 하는 것은 쉽게 생각 하실 수 있을테고
참/거짓 여부를 리턴 하는 경우 대게 거짓은 0, 참은 1을 리턴하지요
이것을 main에서는 for, while문 루프나 if 판단문에서 사용 할 수 있겠죠.

그런데 프로그램의 경우는 약간 다릅니다.
for, while, if 에서는 0을 거짓으로 보았으나 프로그램의 경우에는
0을 리턴하면 정상적인 종료, 그 이외의 값은 잘못된 종료로 생각하기 때문에
shell script를 짤때 이를 이용하기도 하죠.

함수의 경우와 프로그램의 경우에서의 차이점을 알고 쓰심이 좋을것같습니다.
이 부분을 지적한 글이 없는것같아 몇자 적어봅니다.
^^ 수고하세여..

01의 이미지

이제 이해가 됨다^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.