함수에서 예외처리한후 빠져나가기에 대한 질문입니다.
먼저 간략한 코드를 말씀드리겠습니다.
#define ERROR -1 int temp(int data) { if(data==ERROR) // A { cout<<"data == ERROR"<<endl; return NULL; // 문제가 되는곳. } cout<<"temp()~"<<endl; return data; } int main() { temp(ERROR); cout<<"Program Termanated."<<endl; // B return 0; }
문제점 : main함수가 temp를 거쳐 'A' 로 들어가게 되면 'A'만 실행시키고 나와야 한다는 것입니다.
그리고 나서 'B' 를 실행시키면 됩니다.
제가 지금 고민하는것..
실제로는 temp 함수가 리턴하는 값이 integer가 아니라 class의 주소(참조) 라는겁니다.
class clsTemp { }; clsTemp& temp(int data) { clsTemp AAA; if(data==1) // A { cout<<"data == 1"<<endl; // return 을 어떻게; // 문제가 되는곳. } return AAA; }
어떤조건에 의해서 temp 함수가 clsTemp형을 리턴하게 되는데.
A 부분을 에러처리 부분으로 고려하고 있습니다.
에러가 났으면 그걸 밖에다 알리기 위해(문제점2),동시에 temp함수를 빠져나가기위해.....
어떻게 정의를 해야할까요.
exit()를 쓰면 아예 메인이 내려가버리고
return NULL은 컴파일시 형변환이 안된다니.. 모 이래서 안되고..(아마 그래도 요게 ..조금은..)
평상시는 클래스 AAA를 리턴하는건 문제가 아닌데 'A' 조건일때 리턴을 하게 될때
그 값이 잘못됬다고 판별할수 있는 기준을 어디다 두어야 할지를 모르겠어요.
main 함수에서 if(temp() == NULL) 로 비교될수 있는 상황이면 참 좋을것같은데
(이렇게 되는지 알았습니다. 첨엔.. )
이게 간단하게 생각했는데 막상 간단하게 되지가 않네요.
(혹은 클래스에 무언가를 추가해볼까 ..하는 생각도 들기도 하구요.)
생각해보니 존재하는 모든 함수들을 한번 음미해보면서..
일반적으로 함수가 int형으로 해놓은 상황이면 어떻게든 비교가 될텐데..
그렇지 않은 경우는 어떻게 예외처리를 해놓아 그 함수를 빠져 나가게 할것인가..
하는 생각도 해봅니다.
혹은 제가 이런식으로 접근하는것이 잘못된 접근인지.. 조언 부탁드리겠습니다.
안녕하세요. 초보
안녕하세요. 초보 리눅서입니다
잘부탁해요 ^^
방금 생각한건. return 이 아니고선 안될것같습니다.
그런데 return AAA; 를 할때
이 함수밖에서 AAA의 어떤 모습을 보고 예는 정상적으로 리턴한 애고
얘는 예외처리되서 리턴된 애냐..를 어케 판단할지가 고민이네요.
안녕하세요. 초보 리눅서입니다
잘부탁해요 ^^
안녕하세요. 초보
안녕하세요. 초보 리눅서입니다
잘부탁해요 ^^
혹은 go to 도 생각하고 있어요..근데 이건 어느책에서나 가급적 쓰지말라구 하는데..흐미..
안녕하세요. 초보 리눅서입니다
잘부탁해요 ^^
두번째 코드에서
두번째 코드에서 지역 객체의 레퍼런스를 반환하는 건 안 좋습니다.
당장은 동작하는 거 처럼 보여도 나중에 디버그하기 무척 어렵습니다.
그냥 값 복사나 새로 할당받아 포인터, auto_ptr, shared_ptr 등으로 반환하도록 하세요.
코드와 같은 구조를 유지하려면 예외를 throw 로 던지시고 try, catch 로 처리하시면 되는데,
그것보다는 구조를 바꾸시는 것을 권해드립니다.
안녕하세요. 초보
안녕하세요. 초보 리눅서입니다
잘부탁해요 ^^
질문자체가 이상했던것 같습니다.
주위에서 그러네요.
try~catch 공부 똑바루 하라구요 ^^
안녕하세요. 초보 리눅서입니다
잘부탁해요 ^^
댓글 달기