znalazłem jakiś kod C, który ma tę strukturę:do..while wewnątrz przełączyć
switch (n) {
do {
case 1:
// do some things
if (some condition)
goto go_on;
case 2:
// do some things
if (some condition)
goto go_on;
case 3:
// do some things
if (some condition)
goto go_on;
} while (1);
do {
case 4:
// do some things
if (some condition)
goto go_on;
case 5:
// do some things
if (some condition)
goto go_on;
} while (1);
}
go_on:
I zaprogramowany w języku C dla lat (wiele lat temu) i by pomyślał, że będzie to błąd składni. Myślę, że ma to coś wspólnego z optymalizacją pętli, ale zastanawiałem się, czy ktoś może wyjaśnić, co robi. Co dzieje się po osiągnięciu while(1)
, czy skutecznie wraca do przełącznika? A w szczególności dlaczego są tam dwie osoby?
Przy okazji, I nie chcesz rozpocząć dyskusję na temat korzystania z goto
lub jeśli jest to zły projekt. Nie napisałem tego i zakładam, że autor zrobił to w ten sposób, ponieważ sprawił, że pętla działała tak szybko, jak to możliwe.
Wygląda na odmianę [Urządzenia Duffa] (https://en.wikipedia.org/wiki/Duff's_device). Tutaj jest [wyjaśnienie] (https://stackoverflow.com/questions/514118/how-does-duffs-device-work). – tangrs
Pomyśl o instrukcjach 'case' jako etykietach z' switch' jako 'goto'. – chux
to rodzaj techniki rozwijania pętli. pomyśl o końcu pętli. – Alex