-         

Ergebnis 1 bis 9 von 9

Thema: Sowas wie SPRUNGMARKEN in C

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    25.12.2011
    Ort
    Deutschland BadenWürttemberg
    Beiträge
    43

    Sowas wie SPRUNGMARKEN in C

    Anzeige

    Hi,
    ich habe ein Programm bei dem eine erfüllte Bedingung, den Ablauf des Programmes verändern soll.
    Also sowas wie Goto.
    Aber gibt es sowas in C und wenn wie geht es?
    Code:
    if(igendwas) {
    //blabla
    //Überspringe A und gehe zu B
    }
    
    //mach was (A)
    
    //mach noch was  (B)
    Danke
    Florian

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    23
    Beiträge
    449
    Nimm nie-nie-nie-mals GOTO Das nimmt man doch inzwischen nicht mal mehr bei Basic her...

    Was du suchst ist:
    Code:
    if(irgendwas)
    {
      // mach was wenn "irgendwas" = wahr
    }
    else
    {
     // mach was wenn "irgendwas" = falsch [A]
    }
    
    // mach noch was, unabhänig von "if(bedingung)" [B]

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von MisterMou
    Registriert seit
    31.05.2009
    Ort
    Stralsund
    Alter
    26
    Beiträge
    433
    http://lmgtfy.com/?q=goto+c


    Goto hat aber nichts mit sauberer Programmierung zu tun, es kann den Code unlesbar machen.

    edit:
    zu spät -.-
    Mähh macht der Rasenmäher. http://moufx.wordpress.com/

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    25.12.2011
    Ort
    Deutschland BadenWürttemberg
    Beiträge
    43
    Danke -schumi-,
    es müsste so funktionieren.

    Danke
    Florian

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.401
    Zitat Zitat von -schumi- Beitrag anzeigen
    Nimm nie-nie-nie-mals GOTO
    Daraus folgt: nie-nie-nie-mals Assembler.

    Goto hat aber nichts mit sauberer Programmierung zu tun, es kann den Code unlesbar machen.
    Solche Veralgemeinerungen sind doch inzwischen überholt. Wie heißt es so schön: "Schlechte Entwickler schreiben in jeder Sprache unlesbaren Code".

    Selbst in der neuesten C-Version ist goto enthalten und es gibt immer mal wieder Grund, es zu verwenden. Auch ein switch ist nichts anderes als ein berechnetes goto, der Doppelpunkt beim case sieht nicht durch Zufall wie ein Sprungziel aus.

    Was aber sicher richtig ist, in C läßt sich das meiste lesbar ohne goto formulieren, obwohl in tief gestaffelten ifs und Schleifen ein "goto errorexit" zur Lesbarkeit beitragen kann. In Abwandlung des Zitats oben: Ein guter Entwickler darf auch goto verwenden.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    23
    Beiträge
    449
    Zitat Zitat von Klebwax Beitrag anzeigen
    Daraus folgt: nie-nie-nie-mals Assembler.
    Wenn du es schaffst, einen Prozessor zu entwickeln, der if/else/case/Unterprogramme usw. ohne Sprünge abhandeln kann, dann kannst du auch Assembler verwenden

    Zitat Zitat von Klebwax Beitrag anzeigen
    Auch ein switch ist nichts anderes als ein berechnetes goto, der Doppelpunkt beim case sieht nicht durch Zufall wie ein Sprungziel aus.
    Ein switch ist eine Vereinfachung einer Reihe IFs. Und die IF/ELSE sind bedingte Sprungmarken, was einfach daher rührt, dass die Prozessoren die wir haben ein Programm seriell abarbeiten und ein Sprung die einzige Möglichkeit einer Programmverzweigung ist. Sobald sich das geändert hat, wird auch das Goto verschwinden/ noch mehr in der Bedeutungslosigkeit als derzeit versinken, da bin ich mir sicher

    Zitat Zitat von Klebwax Beitrag anzeigen
    Was aber sicher richtig ist, in C läßt sich das meiste lesbar ohne goto formulieren, obwohl in tief gestaffelten ifs und Schleifen ein "goto errorexit" zur Lesbarkeit beitragen kann.
    Stimmt, da müsste noch am Break gefeilt werden..

    Wenn sich das mit den GOTOs in Grenzen hält kann ich auch noch damit leben, aber vor allem als Anfänger sollte man die Finger davon lassen, und sich lieber mit Unterprogrammen usw. befassen... Aber bei Assembler lässt es sich halt derzeit kaum vermeiden...

    Viele Grüße
    -schumi-

    (Ich mach jetzt erst mal nen "Goto Bed" xD)
    Geändert von -schumi- (17.07.2012 um 00:47 Uhr)

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Zitat Zitat von µcFlo Beitrag anzeigen
    ... sowas wie Goto. Aber gibt es sowas in C und wenn wie geht es? ...
    Hier lohnt sich wieder mal mein Kernighan/Ritchie. Da kommt das goto sogar im Sachverzeichnis vor.

    Zitat Zitat von Kernighan & Ritchie ISBN 3-446-15497-3, 1990, Seite 64
    ...
    3.8 goto und Marken
    C verfügt auch über eine beliebig zu mißbrauchende goto-Anweisung und Marken ... Wir haben in diesem Buch goto nicht verwendet (Anmerkung von mir: *ggg*)...
    In einem großartigen Projekt (Transistortester) das ich nachgebaut und nach meinen Wünschen erweitert/geändert habe, werden mehrfach Sprungmarken verwendet - und das Ding läuft und läuft und läuft.

    Ich meide Sprungmarken - fast immer. Aber nur, weil es so was Ähnliches ist wie rechts überholen - tut man nicht, nur manchmal dann doch.
    Ciao sagt der JoeamBerg

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Alle Jahre wieder:

    http://www.roboternetz.de/community/...der-doch-nicht

    Wirklich nett sind selbstmodifizierende Programme.

    Schnell, kompakt und eine echte Herausforderung beim Debuggen :)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    15.02.2004
    Beiträge
    9
    Die Frage ist nicht ob goto oder nicht, sondern die Denkweise die bei einem Assemblerprogrammierer im Sinne von Nassi-Shneidermann nicht strukturiert ist.
    Empfehlung: Formuliere dein Problem zunächst als NS-Diagramm (nicht Flußdiagramm) dann kannst du es anschliessend sowohl in ASM als auch in C codieren.
    In ASM macht man das dann nicht immer so wie in C, weil man z. Bsp. irgendwo hinspringen kann wo es ein gemeinsames Ende gibt während man in C dieses
    Ende als Funktion ausgegliedert mehrfach aufrufen müsste. Als ASM Programmierer leuchtet einem dieser scheinbar unnötige Aufwand nicht gerade ein, aber
    wenn man genau guckt, optimiert ein guter C-Compiler das letztendlich auch wieder weg und macht bedingte Sprünge draus. Wenn der Optimierer was taugt,
    so öhnlich (oder unübersichtlicher und schneller) wie man das selbst auch gemacht hätte. Manche Optimierer ersetzen sogar einen RETURN durch JUMP was
    man als ASM Programmierer wegen der Übersichtlichkeit nicht unbedingt gemacht hätte.

    Bei SPS Anweisungslisten (wurde früher bei Siemns S5 wie Assembler von diskrekt aufgebauten Prozessoren direkt ausgefürt) gibt es übrigens zahlreiche bedingt ausgeführte Befehle.
    Im uC Assembler ist bedingte Ausführung meist nur für Sprünge bekannt, Siemens S5 machte das aber für Bitbefehle wie etwa Bit-setzen oder Bit-rücksetzen. Diese werden nur dann ausgeführt, wenn ein Flag
    des Vorgängerbefehls dies erlaubt. Im uC Assmbler würde man da einen bedingten Sprung machen, der mit einer Sprungmarke hinter den Bitbefehl springt. Eben nur weil es keinen bedingt ausführbaren Bitbefehl gibt. Goto ist also keineswegs eine Frage des schlechten Stils sondern einfach nur der Denkweise. C-Neulinge können sich auch mal Anschauen, was der Compiler bei Break Anweisungen (=goto) macht. Das ist schließlich ein Befehl welcher sogar als "struktruiert" anerkannt ist.

Ähnliche Themen

  1. Könnt ihr sowas bauen ?
    Von NoPlan im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 7
    Letzter Beitrag: 02.02.2012, 06:55
  2. Wie baut man sowas? Erfahrungen?
    Von PuraVida im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 14
    Letzter Beitrag: 24.01.2012, 20:26
  3. Wie schafft man sowas?
    Von Kampi im Forum Offtopic und Community Tratsch
    Antworten: 4
    Letzter Beitrag: 04.01.2012, 17:44
  4. ich brauche sowas wie ein bit array
    Von wischos im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 25.09.2007, 18:09
  5. RxD Interrupt? Gibt es sowas?
    Von strunz im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 20.04.2006, 12:03

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •