Forum: Compiler & IDEs GOTO


von Alex (Gast)


Lesenswert?

Hallo,

Vorgeschichte:
Das Programm läuft normal an und kann während der Laufzeit durch den
Anwender in verschiedenen Modi betrieben werden. Diese erfordern z.T.
Reinitialisierungen des AVRs, die am vor der Hauptschleife im main ()
stehen. Am Beginn der main habe ich mir ein Label definiert.
Erkennt eine Funktion in einer anderen Datei einen Moduswechsel soll
dorthin gesprungen werden.

Problem:
main.c:10: warning: label `restart' defined but not used
communication.c:209: error: label `restart' used but not defined

Wie macht man ein Label global bekannt?

Danke,
Alex

von Alex (Gast)


Lesenswert?

OK, also sowas scheint prinzipbedingt nicht zu funktionieren, Sprünge
sind nur lokal in Funktionen erlaubt. Eigentlich auch logisch, wenn man
die Arbeitsweise eines Compilers berücksichtigt :)

von A.K. (Gast)


Lesenswert?

Siehe setjmp/longjmp. Elegant ist es freilich nicht.

von Fritz G. (fritzg)


Lesenswert?

Könntest du nicht um die Hauptschleife herum noch eine Schleife bauen?

 main()
{
  while (1)
  {
    init(modus); // hier initialisierst du
    while (1) // Hauptschleife
    {
    ...

    if (moduswechsel)
     continue;
    }
  }
} // Ende main

Mit dem continue springst du aus der inneren Schleife raus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.