저는 "에러체크 용도로 리턴값을 사용하는 것이 표준이 아니므로 권장되지 않는다"라는 의미로 받아 들였는데, 만약 아니라면 제가 잘못 판단한 것이겠네요. 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 구성하기)" 이 아니었나 생각되네요.
관례적으로는 보통, -는 거의 무조건 에러 발생. ret > 1 일 경우는 예외 발생.
ret == 1 일 경우는 사용자 정의 나름인데, 자주 쓰이기도 해서 한 가지 의미로 해석하기가 좀 곤란하죠.
위의 예시와 관련해서 ret == 1 일 때, 예외 혹은 에러(0과 대치)란 의미로 쓰이기도 하지만,
true/false 관점에서 두 가지 상태값만 반환할 때는 success(말 그대로 보통은 success 로 define 하죠)로 통용되기도 하니까요...
그리고 성공에 대한 상태값이 여러 개일 경우, 0 이하는 실패, 1 이상은 성공으로 정의하는 경우도 있죠.
공식적인 표준은 없음
즐린
원래 리턴값을 에러체크 용도로 사용하는거 자체가 표준이 아닙니다.
즐린
C라면 그거 말고
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
저는 "에러체크
저는 "에러체크 용도로 리턴값을 사용하는 것이 표준이 아니므로 권장되지 않는다"라는 의미로 받아 들였는데, 만약 아니라면 제가 잘못 판단한 것이겠네요. 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
C라면 그거 말고
(댓글이 중복으로 달려서 하나는 지웁니다)
일반적으로는
윗분 말씀대로 표준은 없고
그냥 음수는 에러 코드로
0은 처리하는데 문제는 없었다라는 의미
그리고 양수는 처리된 결과 상태 코드로써 리턴을하는경우가 많더라구요..
절대적인건아니고 소속된 팀내에서 통용되는 률을 따르는게 가장 바람직한거 같습니다.
---
대한민국
int main() { return
int main()
{
return 0;
}
이거는 거의 표준이죠..;
관례적으로는 보통, -는 거의 무조건 에러 발생. ret > 1 일 경우는 예외 발생.
ret == 1 일 경우는 사용자 정의 나름인데, 자주 쓰이기도 해서 한 가지 의미로 해석하기가 좀 곤란하죠.
위의 예시와 관련해서 ret == 1 일 때, 예외 혹은 에러(0과 대치)란 의미로 쓰이기도 하지만,
true/false 관점에서 두 가지 상태값만 반환할 때는 success(말 그대로 보통은 success 로 define 하죠)로 통용되기도 하니까요...
그리고 성공에 대한 상태값이 여러 개일 경우, 0 이하는 실패, 1 이상은 성공으로 정의하는 경우도 있죠.
자, 그러니까 표준은 없습니다.
이런 건 표준이라고
이런 건 표준이라고 할 수 있을까요?
http://www.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html
---8< 서명 -----------------
애니메이션 감상 기록 http://animeta.net/
음..
표준은 없지만 함수 유형에 따라 각각 자주 쓰이는 타입들은 있죠.
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 』
댓글 달기