2011-01-04 12 views
16

Czy jest coś takiego:Co termin "pusta pętla" odnosi się dokładnie do C i C++?

for(;;) 
{ 
    statements; 
} 

czy jest to w ten sposób:

for(initialisation;condition;updation) 
{ 
} 

szukam odpowiedzi z odniesieniami do różnych źródeł.

+0

Czytaj także: [? jest (pusty) nieskończona pętla niezdefiniowane zachowanie w C] (http: // stackoverflow.com/questions/15595493/is-an-empty-nieskończona pętla-undefined-behavior-in-c) – Deduplicator

Odpowiedz

26

Twój pierwszy przypadek (dla z pustymi wyrażeń) jest nieskończony pętla i druga (z pustym korpusie dla rachunku) jest pusty pętla

+4

Dla rekordu, treść pustego lopa można również wyraźnie pominąć: 'for (initialization; condition, updation) ; ' –

+0

@ Péter Tak, a puste wyrażenie nazywa się" wyciągiem zerowym ". Dotyczy również instrukcji "while". –

+4

i dwa nie są mutexive: 'for (;;);' jest pustą nieskończoną pętlą! – ybungalobill

4

W moim środowisku to jest jak poniżej:

for(;;) { statements; } 

nieskończonej pętli

for(initialisation;condition;updation) { } 

pusta pętla

2

ona równa jest:

while (true) { 
    statements; 
} 

Nieskończony pętli jest pętla, która działa aż coś innego zatrzymuje ją.

+1

To jest * nieskończona * pętla, nie pusta ... –

+0

@Martin, skomentowałem samą odpowiedź, a nie Twój komentarz - przepraszam za zamieszanie :-) –

+0

Dzięki, edytowana odpowiedź. –

2

Odpowiedź zależy od kontekstu.

Jeśli masz na myśli pustą dla pętlę, a następnie

for(;;) 
{ 
    statements; 
} 

coś takiego.

Choć to samo można osiągnąć za pomocą pętli while:

while(true) 
{ 
    statements; 
} 

i to nie jest „pusta” pętla. Obie są nieskończonymi pętlami, z których musisz zrezygnować używając break wewnątrz pętli.

Z drugiej strony,

for(initialisation;condition;updation) 
{ 
} 

to jest „pusta” pętla bascially że nie robi nic, z wyjątkiem być może aktualizować kilka zmiennych, które mogą być zdefiniowane przed samej pętli.

+0

Ostatnia pętla for może bardzo dobrze zrobić wiele rzeczy, ponieważ aktualizacja może mieć wiele różnych efektów ubocznych - jeśli chcesz, możesz umieścić w niej większość aplikacji. Zdecydowanie odradzam to z punktu widzenia łatwości konserwacji, ale zakładając, że ostatnie "w zasadzie nic nie robi", gdy znajdziesz taką pętlę w nieznanym kodzie, z pewnością nie jest to mądre. – Inca

+0

Myślę, że musisz edytować, twierdzisz, że pierwsza pętla 'for' jest pusta i nie jest pusta. – unwind

1

Pusta pętla to pętla z pustym ciałem, np.

for(int i = 0; i < 10; ++i) {} 
while(cin) {} 

(zauważ, że drugi przykład tutaj okazuje się być nieograniczone)

Istnieją przypadki, w których te są przydatne, na przykład, gdy funkcja ta ma pożądany efekt uboczny i zwraca jego sukces, a powinien powtarzany aż powiedzie się, na przykład, aby przeczytać ostatni wiersz w pliku:

std::string getLastLine(std::string filename) 
{ 
    std::ifstream in(filename.c_str()); 
    if(!in) 
    return ""; 

    std::string line; 
    while(std::getline(in, line)); // empty loop, the operation returns the condition 
    return line; 
} 
Powiązane problemy