www.mikrocontroller.net

Forum: Compiler & IDEs Sprungbefehle?


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,
gibts es in C sowas wie einen Sprungbefehl, weil ich hab ein Programm wo 
es mehrere Bedingungen gibt und ein paar von denen sollen nach Erfüllung 
der Bedingung denselben etwas längeren Befehl ausführen. Deswegen wärs 
mir lieber wenns sowas wie ein "GoTo" gäbe und ich den Befehl nur einmal 
im Programm hätte.
Geht das?
Habe AtMega16 auf dem MyAVR-Board.
MfG

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Prinzipiell gibt es schon einen goto.

Was spricht dagegen, den 'etwas längeren Befehl' in
eine Funktion zu packen und diese Funktion an den
entsprechenden Stellen einfach aufzurufen?
void foo()
{
  // hier der etwas längere Befehl
}


int main()
{

   if( .... )
     mach was;

   else if( .... )
     foo();     // führe den 'längeren Befehl' aus

   else if( ..... )
     mach was ganz anderes;

   else
     foo();    // auch in diesem Fall wird der 'längere Befehl' ausgeführt

   ...
}

  

Autor: Joe Die (kosmonaut_pirx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
das geht.
goto marke;
...
marke:
...

wozu man den braucht, weiß ich zwar nicht, aber es gibt sicher hier und 
da einen anwendungszweck, trotz routinen oder macros.
bye kosmo

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> aber es gibt sicher hier und da einen anwendungszweck,

Aber gaaaanz selten.
Manchmal ist ein goto ganz nützlich, wenn in einer
Funktion mehrere Fehlerausstiege notwendig sind und
vor dem return noch Aufräumarbeiten notwendig sind.

Aber abgesehen von solchen Sonderfällen: goto <==> bäh

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anderer Fall in dem ich undogmatisch goto durchaus verwende. Ist ein 
ziemlich klassisches Pattern:

for (...) {
   if (match) goto found;
   ...
}
...Mist, nicht gefunden...
return;

found:
  ...und hier geht's weiter...

Kann man wie immer auch anders machen, aber übersichtlicher sind die 
Alternativen m.E. auch nicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.