저는 30 년 넘게 개발중인 존경받을만한 프로젝트 인 BRL-CAD에 대한 코드를 작성했습니다. 파일을 수정하는 동안 이상한 논리, 특히 오류가 발생했을 때 함수를 종료하는 수단으로 goto를 사용하는 것으로 나타났습니다. 제가 읽은 모든 책은 모든 고토가 더 나은 대체물을 가지고 있다는 사실을 설교합니다. 그러나이 경우에는 고토가 최선의 선택이 될 수있는 출처에 동의합니다. 주어진 :함수 내에서 goto를 사용하여 종료하는 방법
tables.c는 프로그램에서 데이터 테이블을 정렬하고 가져 오는 데 사용되는 3 개의 함수가 들어있는 큰 파일입니다. http://pastebin.com/u4jnNbLu
if ((tabptr=fopen(argv[1], "w+")) == NULL) { //takes place 300-400 lines before the end goto is declared
bu_vls_printf(gedp->ged_result_str, "%s: Can't open %s\n", argv[0], argv[1]);
status = GED_ERROR;
goto end;}
고토 끝 :
end: //frees memory used in function and returns the status(which became an error above)
bu_vls_free(&cmd);
bu_vls_free(&tmp_vls);
bu_ptbl_free(&cur_path);
return status;
이 함수로 고토를 사용하는 것입니다 아래 오류를 확인하고 오류가 발생하면 고토 안타 코드 조각은 전체 파일입니다 중단 ok? 난 전에도 그렇게 생각하지 않았지만, 혼란스러운 중괄호에 코드를 두는 것보다 더 논리적 인 것처럼 보입니다. 그리고/if/else는 오류가 있는지 확인하기 위해 끊임없이 코드를 쳐다 봅니다.
C ** 또는 ** C++? 각 언어의 베스트 프랙티스는 매우 다르다. 예를 들어 'goto'는 C++에서 거의 사용하지 않는다. (나는 아무도 주장하지 않는다.) C에서는 클린업 코드로 점프하는 꽤 표준적인 방법이다. 귀하의 게시물을 참조하십시오. – GManNickG