에 do { } while(0)
구조를 참조 사실을 작성하지 않고 고토의 쓰기 위해 난독 방법입니다. 그것은화물 숭배 프로그래머들이 사용하는데, 어딘가에는 그 결함들이 나쁘다고 읽었지만 그 이유를 이해하지 못했습니다.
여기 Dariusz의 대답은 적절한 goto
과 의미있는 레이블로 다시 작성되었습니다.
beginAtomicOperationSequence();
ret = doSomething();
if (ret < 0) goto handle_error;
ret = doSomething2();
if (ret < 0) goto handle_error;
...
handle_error:
if (ret < 0) {
switch (ret) {
//handle error
}
rollbackAboveOperations();
} else {
commitAboveOperations();
}
보다 명확하고 명백한 것처럼. 그 구조의 목적을 물어야한다는 것조차도 그것이 이라는 나쁜 아이디어임을 보여줍니다.
나는 내 대답에 격렬하다. 나는 우리 프로젝트에서 그것을 사용하고 남용하는 동료가 있기 때문에 나는 그것에 대한 1 개의 재치있는 가치를 발견하지 못했다. 믹스에서 실제 루프를 추가 할 때 더욱 귀찮습니다. 그러면 재미가 시작되어 break
및 continue
으로 연결됩니다.
편집 : 여기에 링크 된 Linus Torvald의 goto에 대한 호언 장담. http://kerneltrap.org/node/553/2131
매크로가 아닌 경우 작성자가 블록의 끝으로 건너 뛰려면 '중단;'을 사용할 수 있도록해야합니다. 어떤 사람들은 비용에 관계없이 '고토'를 피하려고합니다. –
간단한 구글 검색은 당신에게 대답을 가져 왔을 것입니다 – phaazon
@levengli : 아니요, 그것은 중복이 아닙니다. Daniel : java와 같은 일부 언어에는 "goto"키워드가 없으므로 특정 지점으로 건너 뛰려면 레이블이있는 구분 또는 do/while 중 하나를 사용해야합니다. 레이블이있는 구분 구.이 혼동을 줄 수 있으므로 마지막 것이 바람직합니다. –