Pętla nieskończona

Nieskończone pętle często są przejawem błędów w oprogramowaniu. Tutaj niebieski ekran śmierci wystąpił, ponieważ „sterownik urządzenia utknął w nieskończonej pętli”.

Pętla nieskończona to pętla, która nigdy nie zostanie zakończona, ponieważ nigdy nie zajdzie warunek zakończenia pętli. Może być to działanie celowe, stosowane w celu napisania programu nie kończącego nigdy swojego działania (por. serwer, daemon). W praktyce zdarza się, że takie pętle okazują się jednak skończone ze względu na biegnące równolegle procesy, które mogą wywołać pewne zdarzenia – zarówno informatyczne (np. przerwania), jak i fizyczne (np. awaria sprzętu).

Niektóre języki programowania mają w swojej składni pętle nieskończone (obok innych – skończonych – instrukcji pętli), np.:

 loop
    ...
 end loop
 BEGIN
   ...
 AGAIN
 repeat wyrażenie
 LOOP
    ...
 END
  • REXX
 DO FOREVER
   ...
 END

Powstanie pętli nieskończonej może też być błędem programisty, który źle określił warunek zakończenia pętli. O programie komputerowym, który wykonuje pętlę nieskończoną, czasami mówi się, że „zawiesił się”.

Przykłady w C/C++/Java/C#/Python

W językach C[6][7][8], C++[8], Java, C#, Python:

while(true)
{
  // dowolne operacje, „true''”'' można zastąpić dowolną wartością różną od zera.
}

albo

for (;;)
{
  // dowolne operacje
}

albo

while True:
     print "pętla nieskończona"

W wielu językach istnieje instrukcja bezwarunkowego wyjścia z pętli (np. w języku C[6][7][8]) lub w nowszych implementacjach języków, w których standardowo nie występuje taka instrukcja (np. Pascal[9] – Turbo Pascal[10]).

repeat
   if <warunek> then break;

until false;

Przypisy

  1. A. Nico Habermann, Dewayne E. Perry: Ada dla zaawansowanych. Warszawa: Wydawnictwa Naukowo-Techniczne, 1989, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1058-4. (pol.).
  2. Jan Bielecki: Język FORTH. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988, seria: Mikrokomputery. ISBN 83-204-0930-6. (pol.).
  3. Jan Ruszczyc: Poznajemy FORTH. Warszawa: SOETO, 1987, seria: Informatyka mikrokomputerowa. (pol.).
  4. Ralph E. Griswold, Madge T. Griswold: Icon. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-0871-7. (pol.).
  5. Niklaus Wirth: Modula 2. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-0828-8. ISSN 0867-6011. (pol.).
  6. a b Brian W. Kernighan, Dennis M. Ritche: Język C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1067-3. (pol.).
  7. a b Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.).
  8. a b c Jan Bielecki: Od C do C++, programowanie obiektowe w języku C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990. ISBN 83-204-1332-X. (pol.).
  9. Michał Iglewski, Jan Madey, Stanisław Matwin: Pascal. Język wzorcowy – Pascal 360. Wyd. trzecie – zmienione. Warszawa: Wydawnictwa Naukowo-Techniczne, 1984, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.).
  10. Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.).