Vermeidung von goto
-
Ich bin C-Anfänger und komme bei dieser Frage nicht weiter:
Wie kann ich beim folgende Programm "goto" vermeiden?
Wie kann ich nach Loop1/Loop2 springen ohne goto?``` Loop1: if ( 0 == !((MERKER & 0b00000010))) //MERKER, Bit 1 = 1? { SET_FLAG(2); goto Loop2; } // Ja: Weiter mit Loop2 if (PORTAbits.RA1 == 1) // Nein: PORTA, RA1 = 1? { goto Loop1; } // Ja: Weiter mit Loop1 Loop2: INTCONbits.GIE = 0; // Nein: Interrupt ausschalten
-
do { // if ( 0 == !((MERKER & 0b00000010))) //MERKER, Bit 1 = 1? if( MERKER & 0b00000010 ) // Bit 1 gesetzt? { SET_FLAG(2); break; } } while( PORTAbits.RA1 == 1 ); INTCONbits.GIE = 0;
-
Herzlichen Dank für diese wahnsinnig schnelle Hilfe!
Dass muss ich als Anfänger erst mal näher untersuchen, um das zu verstehen.
Dazu muss ich mir den Befehl "Break" mal anschauen.
Ich nehme an, das ist so etwas, wie "Return" bei Funktionen...
-
Nicht ganz...
break
verlässt die umgebende Schleife (for
,do..while
undwhile..do
).
-
Nach "break" geht es wunschgemäß weiter bei Zeile 11, weil "while" noch zur Schleife gehört.
Wenn die Bedingung in Zeile 10 nicht erfüllt wird, geht es dann weiter bei Zeile 4?
Erst wenn die Bedingung in Zeile 10 erfüllt wird, geht es weiter bei Zeile 11, oder?
-
Andersrum: Die Schleife bleibt am laufen solange die Bedingung wahr ist.
-
Ja, vielen Dank für die Erklärung.
Hoffentlich meine letzte Frage:
Wieso ist```if (MERKER & 0b00000010) ```c
das Gleiche wie
```if (0 == !((MERKER & 0b00000010)))```c
Im zweiten Ausdruck wird doch mit "!" negiert, damit nur das Bit 1 bei MERKER abgefragt wird.
Ausserdem: Wenn "== 0" nicht angegeben wird, bedeutet dies automatisch "==0" ?
-
@buschi sagte in Vermeidung von goto:
Im zweiten Ausdruck wird doch mit "!" negiert, damit nur das Bit 1 bei MERKER abgefragt wird.
Was hat negieren mit Bit 1 abfragen zu tun?
-
@buschi sagte in Vermeidung von goto:
Ja, vielen Dank für die Erklärung.
Hoffentlich meine letzte Frage:
Wieso ist (...) das Gleiche wie (...)Weil das eine gar nicht negiert und das andere doppelt.
Ausserdem: Wenn "== 0" nicht angegeben wird, bedeutet dies automatisch "==0" ?
Nein.
if (x)
ist nicht das selbe wieif (x == 0)
sondern das selbe wieif (x != 0)
.
-
@manni66
Ja, richtig und das "!" ist falsch. Danke für die Starthilfe...