Czy możesz zerwać z instrukcją if lub czy spowoduje to awarie? Zaczynam poznawać C, ale wydaje się to kontrowersyjne. Pierwsze zdjęcie pochodzi z książki o C ("Head First C"), a fragment pokazuje kod napisany przez personel klas CS Harvard. Co się właściwie dzieje i ma coś wspólnego ze standardami C?"Przerwa;" z instrukcji "if"?
przerwy nie łamią się, jeśli instrukcje.
W dniu 15 stycznia 1990 r. AT z powodu długich połączeń telefonicznych z powodu awarii i 60.000 osób straciło usługi telefoniczne. Powód? Deweloper pracujący nad kodem C używanym na giełdach próbował użyć
break
, aby wykreślić instrukcjęif
. Alebreak
s nie wyrwać zif
s. Zamiast tego program pomijał całą sekcję kodu i wprowadził błąd, który przerwał 70 milionów połączeń telefonicznych przez dziewięć godzin.
for (size = 0; size < HAY_MAX; size++)
{
// wait for hay until EOF
printf("\nhaystack[%d] = ", size);
int straw = GetInt();
if (straw == INT_MAX)
break;
// add hay to stack
haystack[size] = straw;
}
printf("\n");
Nie można "przełamać" z wyrażenia "if", dopóki 'if' nie znajdzie się wewnątrz pętli. – Ankur
Tak działa język. Przerwa jest użyteczna tylko wtedy, gdy jest warunkowa i musi być warunkowa, musi znajdować się w instrukcji if, right –
Zachowanie instrukcji 'break' jest dobrze określone i , ogólnie rzecz biorąc, dobrze zrozumiany. Niedoświadczony programista może powodować awarie, chociaż na wiele sposobów nie rozumie. Nadużycie instrukcji 'break' nie jest szczególne. –