함수 리턴값 표준이라는게 있나요?

dalili의 이미지

실패할때 -1
실패할때 0

성공때 1
성공때 0

저희 회사 코드 보면 제 각각인데, 표준이나 참조할 만한 문서 있을까요?

hys545의 이미지

즐린

원래 리턴값을 에러체크 용도로 사용하는거 자체가 표준이 아닙니다.

즐린

lifthrasiir의 이미지

C라면 그거 말고 방법이 없습니다만? longjmp/setjmp 쓰라고요?

전웅의 이미지

"원래 리턴값을 에러체크 용도로 사용하는거 자체가 표준이 아닙니다"
== "리턴값을 에러 체크 용도로만 사용하라고 표준이 이야기하지 않습니다"
== "리턴값을 에러 체크 용도로만 사용해야 하는 것도 아닌데 하물며 그 값에 표준이 있을리 만무합니다"

를 의미하신 것 같네요.

그리고 setjmp/longjmp 도 사용 형태는 결국 함수입니다.

--
Jun, Woong (woong at icu.ac.kr)
Web: http://www.woong.org (서버 공사중)

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

lifthrasiir의 이미지

저는 "에러체크 용도로 리턴값을 사용하는 것이 표준이 아니므로 권장되지 않는다"라는 의미로 받아 들였는데, 만약 아니라면 제가 잘못 판단한 것이겠네요. setjmp/longjmp 얘기를 꺼낸 것은 예외적인 상황에 대한 대처에 대한 답변이므로 함수 리턴값에 대한 얘기는 아니었습니다.

전웅의 이미지

네, 원글에 오해의 소지가 있기는 합니다.

setjmp/longjmp() 로 예외 처리를 하더라도 setjmp() 의 반환값을 error
indicator 로 써야 겠지요? 결국 "함수 반환값의 error indicator 로의
사용"이라는 문제와 다르지 않습니다 - 최소한 "에러 있음/없음" 을 구분
하기 위해 set/longjmp() 를 사용한다고 할 때 "setjmp() 의 초기 호출
에서의 반환과 longjmp() 에 의한 반환" 이라는 의미 위에 "setjmp() 설정
에 의한 반환과 작업 수행 중 오류 발생으로 인한 반환" 이라는 error
indication 의 의미가 부여되는 셈이니 함수 반환값을 error indication
channel 로 사용하는 것에서 벗어나지 않습니다.

아마도 하시고 싶은 말씀은 "함수 반환값 vs. set/longjmp()" 가 아니라
"함수 반환값 vs. 별도의 채널(errno, 전역 변수, 매개변수로 포인터 받기,
set/longjmp 사용시 exception stack 구성하기)" 이 아니었나 생각되네요.

--
Jun, Woong (woong at icu.ac.kr)
Web: http://www.woong.org (서버 공사중)

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

lifthrasiir의 이미지

(댓글이 중복으로 달려서 하나는 지웁니다)

kang1의 이미지

윗분 말씀대로 표준은 없고

그냥 음수는 에러 코드로
0은 처리하는데 문제는 없었다라는 의미
그리고 양수는 처리된 결과 상태 코드로써 리턴을하는경우가 많더라구요..

절대적인건아니고 소속된 팀내에서 통용되는 률을 따르는게 가장 바람직한거 같습니다.

---

대한민국

아메스트리에우려먹은사골맹탕의 이미지

int main()
{
return 0;
}

이거는 거의 표준이죠..;

관례적으로는 보통, -는 거의 무조건 에러 발생. ret > 1 일 경우는 예외 발생.
ret == 1 일 경우는 사용자 정의 나름인데, 자주 쓰이기도 해서 한 가지 의미로 해석하기가 좀 곤란하죠.
위의 예시와 관련해서 ret == 1 일 때, 예외 혹은 에러(0과 대치)란 의미로 쓰이기도 하지만,
true/false 관점에서 두 가지 상태값만 반환할 때는 success(말 그대로 보통은 success 로 define 하죠)로 통용되기도 하니까요...
그리고 성공에 대한 상태값이 여러 개일 경우, 0 이하는 실패, 1 이상은 성공으로 정의하는 경우도 있죠.

자, 그러니까 표준은 없습니다.

7339989b62a014c4ce6e31b3540bc7b5f06455024f22753f6235c935e8e5의 이미지

이런 건 표준이라고 할 수 있을까요?

http://www.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html

---8< 서명 -----------------
애니메이션 감상 기록 http://animeta.net/

ymir의 이미지

표준은 없지만 함수 유형에 따라 각각 자주 쓰이는 타입들은 있죠.
int type 을 return 하는 경우에.. 제가 자주 쓰는 것들은 아래와 같고..
prototype 에 doxygen style 로 명시를 해둡니다.

unix convention(?)
- 0 : success
- -1 : fail/error (global errno is set)

boolean
- 0 : false
- 1 : true

index
- 0 : undefined (none, default, blah blah..)
- none-zero(positive) : index value

comparison
- 0 : matched
- positive : arg1 > arg2
- negative : arg1 < arg2

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

댓글 달기

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