return(0), return(1), return(-1) 어떤 의미인가요?

boardholic의 이미지

return -1, 0 ,1 숫자의 의미가 있나요?

어쩔때는 -1로 되있고 어쩔때는 0,1로 되있는데 같은 책에도

수시로 바껴서 나오니 너무 햇갈립니다.

cbycby의 이미지

프로그램 혹은 함수의 리턴값을 의미합니다.

보통
0 : 정상 종료
-1: 에러 발생
1이상 숫자 : 정상 종료 되었으나 다른 무엇인가 있음을 나타냄
-2 같은 숫자 : 에러 발생했으나 구체적으로 무엇이다를 나타냄

0과 -1의 경우 위의경우처럼 해석하고
1이상, -2 이상의 숫자의 경우는
구체적으로 무엇때문이다라는 것을 외부에 알려줄때 사용합니다.
이들 숫자로 미리 약속해 놓고 처리합니다.

http://www.korone.net QT 커뮤니티 사이트

boardholic의 이미지

예를들어 소켓 생성하는 부분에서

if((sfd=socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("error\n");
return 0;
}

return부분에서 -1 또는 0을 해도 구지 상관은 없는건가요?
에러 처리하는 부분이니까 -1이 더 정확한 사용법인가요?

간단한 함수 하나에 왠지 햇갈려서 넘 신경쓰이네요 ^^;

나에게 있어 한계란 없다.
무한한 꿈을향해 나아간다.

purewell의 이미지

$man errno

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz

madkoala의 이미지

함수의 return 값이라면 몰라도, 프로그램 자체의 반환값은
크게 의미를 가지지 않습니다.(대부분의 경우에는)

잘 쓰이는 경우는, 쉘스크립트에서 특정 프로그램을 실행하고 그 결과값을 받아서
처리하는 경우가 아니라면 프로그램 자체의 반환값에 대해 크게 신경쓰지 않으셔도 좋습니다.

하지만, 그것도 어느 면에서 보면 관습적이라고 볼 수 있으므로 반환값을
정확한 의미로 사용하시는 것이 좋을 것으로 보입니다.

aero의 이미지

보통의 UNIX 시스템함수들에서는

만약에 리턴값이 성공/실패만 나타내면
-1 은 에러를 0은 성공을 뜻합니다.

그리고 함수가 성공/실패여부만 돌려주는게 아니라면
음수가 아닌 리턴값은 다양한 형태의 성공상태를 알려주는데 쓰이고
음수는 에러또는 다양한 에러상태를 나타내는데 쓰입니다.

ddoman의 이미지

boardholic wrote:
return -1, 0 ,1 숫자의 의미가 있나요?

어쩔때는 -1로 되있고 어쩔때는 0,1로 되있는데 같은 책에도

수시로 바껴서 나오니 너무 햇갈립니다.

아무 의미 없습니다.
-1을 에러로 간주하던 0으로 하던 1로 하던 짜는 사람 맘입니다.
물론 많이 쓰는 스타일이나 특정 플랫폼, 특정 프레임워크에서의 에러 정의들은 당연히 있습니다.

리턴을 이용한 좋은 에러 넘버 정의에 대해서 물으신다면
당연히 얘기가 많겠지만

정만 단순히
return (-1) return (0) return(1) 의 의미는
-1을 리턴, 0을 리턴, 1을 리턴...

ㅇㅅㅇ의 이미지

국제 표준화 기구 ISO에서 0은 정상 종료, -1은 에러 등으로 일종의 약속 같은걸 한거죠

ddoman의 이미지

madkoala wrote:
함수의 return 값이라면 몰라도, 프로그램 자체의 반환값은
크게 의미를 가지지 않습니다.(대부분의 경우에는)

system() 콜을 이용하여 다른 프로그램을 실행할때
단순한 성공여부를 리턴으로 체크하기도 합니다.
stdlib.h 에 정의되어있는 EXIT_FAILURE, EXIT_SUCCESS 정도는
이용을 해주는게 좋지않을까 싶네요..

cinsk의 이미지

대부분의 system call 형태의 함수들은 성공하면 0, 실패하면 -1, 실패했을 때 에러 종류는 errno에 저장합니다.

참, 거짓을 나타내야 하는 predicate 함수들.. 예를 들면, 파일이 존재하는지.. 지정한 타입이 맞는지 등등.. 의 함수들은 참이면 1, 거짓이면 0을 리턴합니다. 물론 참인 경우, 임의의 0이 아닌 값을 리턴하기도 합니다.

main() 함수에서 부르는 return statement이나 exit()에 전달하는 인자는 대개 0이면 프로그램의 성공을, 0이 아니면 실패를 나타냅니다. 매크로 EXIT_SUCCESS와 EXIT_FAILURE를 쓰는게 더 좋긴 합니다. (오래된 시스템에서는 이 두 매크로를 지원하지 않을 수도 있습니다만 크게 문제되지는 않습니다. 만들기 쉽기 때문이죠. 아래 C 코드 참고) 이 것 때문에 shell 프로그램을 작성할 때 조금 헷갈리기도 합니다.

if echo; then echo success; fi
if test echo; then echo huh?; fi

#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS    0
#define EXIT_FAILURE    1
#endif
sangwoo의 이미지

*BSD를 사용하시는 분이라면, sysexits(3) 의 컨벤션을 보시는 것도 좋겠네요. return이 아니고, exit(3)에 해당되는 이야기이긴 하지만요.
http://www.freebsd.org/cgi/man.cgi?query=sysexits&apropos=0&sektion=0&manpath=FreeBSD+5.3-RELEASE+and+Ports&format=html

----
Let's shut up and code.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.