2014-11-15 3 views
-2

우리가 집으로 돌아가는 동안 내 친구 중 한 명이이 질문을했습니다. 그리고 그는 선생님에게서이 사실을 알게되었습니다. 먼저 그는 몸이없는 무한 루프와 같은 무언가를 나에게 말했다. 그러므로 나는이 질문을 여기에 게시하여 무한 루프을 dummy for loop라고 부르는지 여부를 묻습니다.C에서 Dummy for Loop이란 무엇입니까?

나는 인터넷 에서뿐만 아니라 읽지 않은 책들에서 Dummy For와 같은 것을 보지 못했습니다. 나중에 그는 빈 몸체를 포함하는 루프에 대한 것들은 더미 루프 (dummy loop)라고 알려져 있습니다. 하나는 다음과 같습니다.

이러한 루프는 경우에 따라 매우 유용합니다. 나는 소프트웨어 개발 분야에 실제로 존재하는 것이 있는지 또는 개인이 부여한 이름인지를 알고 싶어했다.

죄송합니다. 세부 정보 수정이 지연되었습니다.

+6

이것은 무한 루프입니다. – haccks

+0

치명적인 오류가 발생했을 때 임베디드 시스템에서 사용되며 워치 독 타이머가 시스템을 재설정 할 때까지 소프트웨어를 유휴 상태로 유지하려는 경우가 있습니다. – user3386109

+1

질문의 힌트를 드릴 수 있습니까? 어디에서 그 코드를 쳤습니까? 이것은 활동적인 무한 루프입니다. 우리가 normaly가 피하려고 시도하는 것이 무엇입니까? –

답변

1

무한 루프. 이렇게하면 for 루프가 계속 실행됩니다. 그냥 it.There의 사용을 언급하는 사용자가 일부 데이터를 입력 유지하고 필요가있을 수 있습니다 때 특정 매치가 발견되면 이것을 탈옥해야합니다.

비슷한 예

while(1) 
{ 
} 

에 :

while(1) 
{ 
    printf("Enter a number\n"); 
    scanf("%d",&a); 
    flag = 0; 
    switch(a) 
    { 
     case 1: 
     printf("hi\n"); 
     break; 
     case 2: 
     flag = 1; 
     break; 
    } 
    if(flag) 
    break; 
} 
printf("Out of while loop\n"); 
} 
+1

몸체가 없으므로 설명하고 설명하는대로 '중단'할 메커니즘이 없습니다. – ChiefTwoPencils

0

을 감안할 때 dummyloop.c

int main(int args, char ** pargs) 
{ 
    for(;;); 
} 

의 gcc -g -c dummyloop.c

dummyloop.o:  format de fichier elf64-x86-64 


Déassemblage de la section .text: 

0000000000000000 <main>: 

int main(int args, char ** pargs) 
{ 
    0: 55      push rbp 
    1: 48 89 e5    mov rbp,rsp 
    4: 89 7d fc    mov DWORD PTR [rbp-0x4],edi 
    7: 48 89 75 f0    mov QWORD PTR [rbp-0x10],rsi 
    for(;;); 
    b: eb fe     jmp b <main+0xb> 

b: jmp b가 활성 무한 루프가 우리가하는 데는 보통 피하고자하는 뭔가 무한 루프

입니다 dummyloop.oobjdump를 -d -M 인텔은 -S.

3

몸체가없는 무한 루프입니다. 목적은 프로그램이 끝나지 않았는지 확인하는 것입니다. 유휴 루프라고도합니다.

아무 것도 일어나지 않을 것이라는 것을 의미하지는 않습니다. 여전히 인터럽트가 발생하여 CPU 루프가 루프 밖으로 빠져 나오고 인터럽트 서비스 루틴이 완료된 후 루프로 돌아갈 수 있습니다.

종종이 기술은 입력 및 타이머가 모든 활동이 발생하는 인터럽트를 트리거하는 임베디드 프로그래밍에서 사용됩니다. 인터럽트가 처리되지 않으면 프로그램이 코드 끝에서 실행되지 않도록해야합니다.

+0

일반적으로 컴퓨터를 가열하기 위해 [부작용] (https://en.wikipedia.org/wiki/Side_effect)이 있습니다. 대신 [유휴] (https://en.wikipedia.org/wiki/Idle_%28CPU%29) 루프를 원할 수 있습니다. –

+0

@BasileStarynkevitch 귀하의 제안에 감사드립니다. 이 용어를 포함하도록 답안을 수정했습니다. – UncleO

+0

아니요, for (;;)는 유휴 루프가 아니며 buzy burning 루프입니다. (시그널이나 인터럽트 핸들러에서 실제 처리가있는) 유휴 루프입니다. –

0

당신이 설명한 루프는 (;;); ;은 아무 것도 정의되어 있지 않으므로 무한 루프입니다.

(초기화; 조건; 증가/감소);dummy for loop입니다.

다음과 같이 작동합니다 :

';' 고유 식별 번호가 0 (NULL)입니다.

for 루프의 마지막에 세미콜론을 추가하면 루프의 몸체로 동작합니다 (for). 따라서 for 루프는 아무 것도하지 않습니다 (세미콜론).

  1. 루프에 전달 된 인수가 이제 경우, 말, (i=0;i<=10,i++); 그런 다음 10 번 실행하고 아무것도하지 않는 것입니다.

  2. 인수가 전달되지 않으면 for(; ;); 무한 루프이므로 아무것도 수행하지 않습니다.

아무 것도하지 않으므로 세미콜론 때문에 "더미"라고합니다.

+0

어떤 시간이 지연 되었습니까? 루프가 종료되지 않으므로 유일한 지연은 ** 무한 **입니다. 최근의 컴파일러 컴파일러에서는 루프 뒤의 명령문에 대한 코드를 생성하지 않습니다. 일반적으로 지연에 대한 간단한 계산 루프 (여기서는 그렇지 않습니다!)를 사용하면 디자인이 좋지 않으며 인터럽트를 사용하면 결국 프로그램이 중단됩니다. – Olaf

+0

@olaf for for (;;);는 무한 루프이지만'for (i = 1; i <= 10; i ++);는 그렇지 않습니다. ** 시간 지연 **은 'i'를 '1에서 10'으로 이동하는 처리에서 소비되는 시간이고 '11'에서 이동하면 루프가 종료됩니다. 한번 시도해 보면 알 수 있습니다. –

+0

LOL! 그 루프는 컴파일러에 의해 최적화 될 것입니다! 그렇지 않은 경우에도 신뢰할 수있는 지연을 제공하지 않습니다. 올바른 방법은 적절한 양식의 타이머를 사용하는 것입니다. – Olaf

관련 문제