예전에도 goto에 대해서 논쟁이 있었습니다. goto를 배제하는 로직을 짜야만 structured programming을 잘 짠거다, 아니다란 논쟁이 있었지만 거의 소모적이었습니다.
사실 너무 심한 루프에는 goto로 에러를 처리하거나 마지막 뭐 정리작업(?, 메모리회수나 세션정리같은거)을 해치우는게 깔끔한것 같습니다. 저도 아주 가끔은 goto를 쓰는데 오히려 보기 좋을때도 많습니다.(저는 goto 옹호론자) 하지만, 많이 쓰면 필수적으로 지저분해지죠. 한개 이상은 좀 자제하는게... ^^*
========================================
* The truth will set you free.
[rommance@cross exception]$ man try
man: 그런 파일이나 디렉토리가 없음
Failed to open the message catalog man on the path NLSPATH=<none>
없다는데요.. 음..
#include <stdio.h>
int main()
{
int i,j;
try
{
for(i=0; i<100; i++) {
for (j=0;j<100;j++) {
printf("%d, %d\t", i, j);
if (i==20)
throw i;
}
}
}
catch (int i)
{
printf("catched! %d\n", i);
}
printf("end of program=n");
return 0;
}
Quote:
[rommance@test exception_test]$ gcc main.c
main.c: In function `main':
main.c:8: `try' undeclared (first use in this function)
main.c:8: (Each undeclared identifier is reported only once
main.c:8: for each function it appears in.)
main.c:8: parse error before `{'
main.c:9: parse error before `)'
main.c:10: parse error before `)'
main.c:13: `throw' undeclared (first use in this function)
main.c:13: parse error before `i'
main.c: At top level:
main.c:15: parse error before `}'
main.c:21: parse error before string constant
main.c:21: warning: data definition has no type or storage class
대략 goto 쓰는 방법과 동일한 이펙트를 줄거라고 생각됩니다...
예외의 명칭이 escapeLoop 루프를 탈출해라.....이런식으로 하면 명시적이고 깔끔하지 않나요?
그리고 마구잡이 catch(...) 도 아니고 많이 사용되는 기본형 int 따위로 잡는것도 아니고...
함수내부에서만 정의되는 예외 클래스 사용하므로, 함수 밖에서 사용될 염려도 없고, 내부에서 호출하는 함수중에서
이 예외를 던질놈도 없고....
다중루프 한번에 탈출시키는데 아무 문제 없다고 생각됩니다...
대략 throw를 goto 문으로 catch(escapeLoop) 를 레이블로 생각하면 되겠네요...
for 구문과, 그것에서 참조되는 변수들(만)을 참조할 수 있는 다른 함수를
써도 무방한 경우라면, 그걸 쓰죠 :-)
int main (void) {
double tensor[X][Y][Z];
/* 여기서 하지 말고...
unsigned i, j, k;
*/
.....
err_code = func (tensor);
.....
return 0;
}
int func (double ***) {
int err_code;
unsigned i, j, k;
for...
for...
for... {
....
switch (또는 if나 뭐라도...) {
}
return err_code; /* 뭔가 문제 있다는 정보까지 알 수 있음 */
}
return err_code; /* 아무 문제 없음! */
}
그런데 저라도 왠만하면 그냥 goto 쓰거나, 아니면 break 몇 번으로
쓰겠습니다.. :D
C 에서는 goto를 안쓴다면하나씩 빠져나갈수 밖에 없는걸로 압니다.
C 에서는 goto를 안쓴다면
하나씩 빠져나갈수 밖에 없는걸로 압니다..
결국 flag를 줘서 break 계속 걸어주는 수밖에
없는거 같아요..
C 에서 다중루프 빠져나가는데는 goto 만한게 없습니다..플래그를
C 에서 다중루프 빠져나가는데는 goto 만한게 없습니다..
플래그를 주는 방법도 있고...다중루프문만을 따로 함수로 만들어서
return 시키는 방법도 있겠지만....
효율로 따진다면 goto 만한게 없습니다..
게다가, goto 는 어셈블리 코드 한줄로 끝나죠;;;
structured programming 방식에서는 쓰면 안되는 것으로 인식되는것이
goto 지만, 이런면에 있어서는 goto 를 인정해야 하죠..
자바에서도 break [label] 을 만들어서 다중루프를 빠져나갈수 있게 해 놓았죠....
그럴 때는 goto를 쓰세요.독도 잘쓰면 약이 된다는 것처럼, g
그럴 때는 goto를 쓰세요.
독도 잘쓰면 약이 된다는 것처럼, goto 역시, 적절히 잘 쓰면 좋습니다.
그럼 고운 하루.
=========================
CharSyam ^^ --- 고운 하루
=========================
예전에도 goto에 대해서 논쟁이 있었습니다. goto를 배제하는 로직을
예전에도 goto에 대해서 논쟁이 있었습니다. goto를 배제하는 로직을 짜야만 structured programming을 잘 짠거다, 아니다란 논쟁이 있었지만 거의 소모적이었습니다.
사실 너무 심한 루프에는 goto로 에러를 처리하거나 마지막 뭐 정리작업(?, 메모리회수나 세션정리같은거)을 해치우는게 깔끔한것 같습니다. 저도 아주 가끔은 goto를 쓰는데 오히려 보기 좋을때도 많습니다.(저는 goto 옹호론자) 하지만, 많이 쓰면 필수적으로 지저분해지죠. 한개 이상은 좀 자제하는게... ^^*
========================================
* The truth will set you free.
exception...[code:1]try{
exception...
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
옷 exception이 c에서도 되나요?그리고 (void*)& 의
옷 exception이 c에서도 되나요?
그리고 (void*)& 의 용도는요?
rommance.net
[rommance@cross exception]$ man tryman
[rommance@cross exception]$ man try
man: 그런 파일이나 디렉토리가 없음
Failed to open the message catalog man on the path NLSPATH=<none>
없다는데요.. 음..
rommance.net
try ... catch 는 c++의 문법입니다.
^^;;
좀 죄송한 글이지만...
C++에서의 예외의 잘못된 사용의 대표적인 예로
goto 써서 빠져나와야할 곳에다 예외를 사용하는 것이 꼽히지요...
음...반드시 그렇다고는 생각 안해요..
이런 구문이야 문제가 되겠지만....( 내부의 다른 함수나 그런 놈들이 예외 throw 던지면 이 함수의 catch가 잡아버려서 어이없게되는)
다음처럼 하면 try {} catch{} 도 나름 깔끔하지 않을까요..
대략 goto 쓰는 방법과 동일한 이펙트를 줄거라고 생각됩니다...
예외의 명칭이 escapeLoop 루프를 탈출해라.....이런식으로 하면 명시적이고 깔끔하지 않나요?
그리고 마구잡이 catch(...) 도 아니고 많이 사용되는 기본형 int 따위로 잡는것도 아니고...
함수내부에서만 정의되는 예외 클래스 사용하므로, 함수 밖에서 사용될 염려도 없고, 내부에서 호출하는 함수중에서
이 예외를 던질놈도 없고....
다중루프 한번에 탈출시키는데 아무 문제 없다고 생각됩니다...
대략 throw를 goto 문으로 catch(escapeLoop) 를 레이블로 생각하면 되겠네요...
goto를 좋아하진 않는 유저입니다만,다중 loop에서 빠져나올때만큼
goto를 좋아하진 않는 유저입니다만,
다중 loop에서 빠져나올때만큼은 goto가 좋은것 같네요.
물론 java같이 break [label]; 이 지원되면 더 좋겠지만요.
경우에 따라서는 필요한 부분을 function나 procedure로 만들어서
빠져나와야할 때 return 해버리는 것도 괜찮은 방법이라고 생각합니다.
-_-
글세요 저는 Goto를 써보질 않아서....
너무 효율적이지 못 한가요..
이런 것도 있죠..
============================================================
선한 인간이냐 악한 인간이냐는 그사람의 의지에 달렸다. -에픽테토스-
의지 노력 기다림은 성공의 주춧돌이다. -파스퇴르-
============================================================
Re: 다중 for문에서 빠져나가려면..?
저두 goto 를 추천합니다만, 굳이 goto 가 싫타면야... 이런 방법도...
expression-2 가 0 이면 종료.
발 담갔다. 이제 익숙해 지는길만이..
for 구문과, 그것에서 참조되는 변수들(만)을 참조할 수 있는 다른 함
for 구문과, 그것에서 참조되는 변수들(만)을 참조할 수 있는 다른 함수를
써도 무방한 경우라면, 그걸 쓰죠 :-)
그런데 저라도 왠만하면 그냥 goto 쓰거나, 아니면 break 몇 번으로
쓰겠습니다.. :D
감사합니다
에구...이렇게 많이 알려주시니...부담이...^^
감사합니다..
많은 도움이 되었습니다...
댓글 달기