programing tip

for 루프, 특히 for (;;)는 어떻게 작동합니까?

itbloger 2020. 11. 30. 07:55
반응형

for 루프, 특히 for (;;)는 어떻게 작동합니까?


오래된 회사 코드를 살펴보면 다음과 같은 for 루프를 발견했습니다.

for (;;) {
    //Some stuff
}

Google을 시도했지만 답변을 찾을 수 없습니다. 프로그래밍 수업에서 잠들었나요? 아니면 비정상적인 루프인가요?


forJava 루프는 다음 구조를 갖습니다.

for (initialization statement; condition check; update)
    loop body;

보시다시피 여기에 네 가지 진술이 있습니다.

  1. 초기화 문 :이 문은 루프가 처음 입력 될 때 한 번만 실행됩니다. 이것은 선택적 명령문이며이 필드를 비워 둘 수 있음을 의미합니다. 일반적으로 일부 초기화 목적으로 사용됩니다.
  2. 조건부 확인 :이 문장은 아마도 가장 중요한 문장 일 것입니다. 특정 표현식이 참으로 평가되는지 여부를 확인합니다. 그렇다면 루프 실행이 계속됩니다. 이 필드를 비워 두도록 선택할 수 있으며이 필드는로 평가됩니다 true.
  3. 업데이트 :이 명령문 목록은 왼쪽에서 오른쪽으로 실행되며 일반적으로 일부 변수를 증가 / 감소시키는 데 사용됩니다.
  4. 루프 본문 : 조건부 확인의 진실 값에 따라 반복해서 실행되는 루프 본문입니다.

기본적으로 이것은 실행이 뒤 따르는 방식입니다. 먼저 루프가 처음 입력 될 때 초기화 문이 한 번 실행됩니다. 그런 다음 조건부 검사가 실행되어 true로 평가되었는지 확인합니다. 그렇다면 루프 본문이 실행되고 그렇지 않으면 루프 실행이 완료됩니다. 그 후 Update 문이 실행됩니다. 그런 다음 조건부 검사가 다시 실행되고 true로 평가되면 다시 루프 본문이 실행되고 update 문이 실행되고 다시 조건부 검사가 실행됩니다.

이제 for( ; ; )구문 에 대해 . 초기화 문이 없으므로 아무 것도 실행되지 않습니다. 조건부 검사 문도 비어 있습니다. 즉, 루프 본문이 실행 된 후 true로 평가됩니다. 다음으로 update 문이 비어 있으므로 아무 것도 실행되지 않습니다. 그런 다음 조건부 검사가 다시 수행되어 다시 true로 평가되고이 전체 프로세스가 다시 반복됩니다.

보시다시피, 이것은 기본적으로 초기화 명령문이없는 무한 루프이며, 조건 검사는 항상 true로 평가되고 업데이트 명령문이 없습니다. 이것은-

while(true)
{
    .....
}

Java에서 또 다른 인기있는 루프 구조입니다.

이와 같은 무한 루프를 사용할 때는 대부분의 경우 루프가 무한정 실행되도록 할 수 없으므로 중단 조건에주의를 기울이는 것이 중요합니다. 이러한 종류의 루프에서 벗어나려면 break문을 사용할 수 있습니다 . 구조는 다음과 같습니다.

if(some_condition_is_true)
    break;        // This will cause execution to break out of its nearest loop

또는

if(some_condition_is_false)
    break;

이것은 다음과 같습니다.

while(true) {
  //Some Stuff
}

기본적으로 무한 루프의 대체 구문입니다.


이것들은 모두 무한 루프입니다

for(;;) {
   // endlessly
}

while(true) {
   // endlessly
}

do {
   // endlessly
} while(true);

이 루프는 가드가 없으며 while (true) 루프 역할을합니다. 휴식 시간까지 무한 반복됩니다.


무한 루프입니다. 실제로 컴파일되거나 런타임 오류가 발생하지 않는 직관적이지 않기 때문에 정확하게 좋은 코딩은 아닙니다. while(true) { /* code */ }무한 루프를 나타 내기 위해 훨씬 더 읽기 쉬운 재 작성 .


It's an infinite loop. The initialization, condition, and increment statements are all optional, so without any of them, this will always loop again (unless a break is hit or some other construct interacts with it).

Although I'm unsure about Java, this question explains how in .Net your empty for and a while (true) will be compiled to exactly the same thing. I would not be surprised if Java does as well.

참고URL : https://stackoverflow.com/questions/7081339/how-does-a-for-loop-work-specifically-for

반응형