은 왜왜`while ((ch = getchar())! = EOF)`가 일반적인 관용구입니까?
while ((ch = getchar()) != EOF) {
// stuff
}
일반적인/선호/다음보다 더 나은 생각?
ch = getchar();
while (ch != EOF) {
// stuff
ch = getchar();
}
나는 몇 가지 이유를 생각할 수 있습니다.
경우 :
- 짧은.
- 모든 것이 조건으로 이루어집니다.
- 루프 전에 조건을 다시 작성하고 루프의 끝에 을 잊지 않을 수 있습니다.
- 혼란 : 반대
.
- 루프 내에서의 할당입니다 (혼란 스러울까요?).
- 루프의 조건에서 잠재적으로 초기화되지 않은 변수입니다 ( 이 할당되었지만 즉시 명확하지 않을 수 있음).
- 두 번째 형식으로 "한 줄, 한 작업"사고 방식을 유지하면서 비교 및 할당이 깔끔하게 분리되어 유지됩니다.
- 모든 할당에 대해 하나의 비교가 있으므로 두 경우 모두 의 복잡도가 동일하므로 이해하기 쉬운 양식 을 선호해야합니다.
비슷한 구조가 사용 된 다른 예가 있습니까?
나는이 질문이 의견을 이끌어 낼 것이라는 느낌이 들기 때문에 나는 일종의 이유와 함께 뒷받침 해달라고 요청할 것이다. 간단한 검색 결과이 질문과 중복되지 않았으므로 중복되지 않았 으면합니다.
더 좋은 방법은 'for (ch = getchar(); ch! = EOF; ch = getchar())입니다. – Nishant
(ch = getchar(); ch! = EOF; ch = getchar()) 두 번째 경우 대신 EDIT : ^^ 단어를 내 입에서 꺼 냈습니다 –
대체 양식을 사용하지 않는 이유는 [DRY 원칙] 때문입니다 (https://en.wikipedia.org/ wiki/Don % 27t_repeat_yourself). 이것은 또한 오늘날 인기있는 'for'루프 솔루션에도 적용됩니다. – user3386109