Autor Thema: Label bei C  (Gelesen 20544 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline matashen

  • Benutzer
  • Beiträge: 1.779
Label bei C
« am: So 25.01.2009, 18:45:23 »
Hallo zusammen,

ich brauche für eine Ausnahmesituation ein Label im C-Code. Das deklarieren mach ich meines Wissens mit Label1:
Aber wenn ich es aufrude mit
Label1;
Dann bekomm ich ne Fehlermeldung. Wie ruf ich das auf???

Gruß Matthias
Have you played Atari today ?!

guest2291

  • Gast
Re: Label bei C
« Antwort #1 am: So 25.01.2009, 20:59:42 »
Erwartungsgemaesse Nutzung von Labels wird im ersten Treffer gezeigt. (goto)

Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: Label bei C
« Antwort #2 am: So 25.01.2009, 22:02:17 »
Hi,

Und wenn ich das so mache dasnn bekomm ich

opoly.m65:8520:Error:'L311' undefined (first use)
1 undefinded local label(s) !
1 error(s) !

so viel zu deine Treffer  :P
So viel hab ich schon gewusst, nur das funzt so bei mir nicht...


Ich caste dabei von einem beliebigen Punkt im Programm zum Startpunkt. Das evtl das Problem ???

Gruß Matthias

Have you played Atari today ?!

guest2291

  • Gast
Re: Label bei C
« Antwort #3 am: So 25.01.2009, 22:15:29 »
Du castest in deinem Programm hin und her?  ???

Also, du hast sicherlich gelesen das man Labels eh nicht verwenden soll, also ueberlege dir lieber eine Loesung die ohne solche Spruenge auskommt.

Ggf. musst du fuer den verwendeten Compiler Besonderheiten beachten, die sich in der Anleitung zum selbigen finden lassen sollten?

Hast du in der "goto-Zeile" den Doppelpunkt versehentlich nochmal stehen?

Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: Label bei C
« Antwort #4 am: So 25.01.2009, 22:29:05 »
Es geht darum in nem Lynx ins Startmenü zu kommen. Ich hab nur noch wenige Bytes RAM und muss von verschiedenen Stellen des Spiels aus zum Startpunkt gelangen. Na was würdest du als Speichersparenste und einfachste Variante vorschlagen:
1. Alles in eine GROSSE Schleife packen und mittels abbruchbedingungen an jedem Abfragepunkt verhindern das was in verzweigungen abschweift, oder
2. Ein Goto zu dem Punkt setzen wo anschließend
reset_game_vars und dann Startmenu aufgerufen wird.

als dritte Variante gäbs da noch die möglichkeit einen Hardware-Soft-Reset über nen Assembler-Call auszulösen. Alternative falls goto nicht funzt, aber eigentlich wollte ich dem Spieler die Introscenen ersparen nur weil er ein neues Spiel beginnen will.

Ich kenne alle bedenken und alles für und wieder, aber in diesem Fall komm ich nur mit extremen Aufwand um das goto herum, ausser mit Reset.

Deswegen wollte ich eine Lösung das goto zum laufen zu bekommen und nicht eine Überzeugungsarbeit gegen das goto.

Gruß Matthias
Have you played Atari today ?!

guest2291

  • Gast
Re: Label bei C
« Antwort #5 am: Mo 26.01.2009, 09:00:56 »
Wie gesagt, hinter dem ersten Link verbergen sich auch Beispiele fuer die Nutzung von goto.

Das es so bei dir nicht funktioniert, kann ich schlecht nachvollziehen, du hast mir ja immer noch nicht den verwendeten Compiler verraten. (Das man einigen Leuten alles "aus der Nase ziehen" muss bereitet mir keine Freude und verleitet nicht gerade zum ausfuehrlichen Antworten.)

Dein Problem klingt fuer mich auf den ersten Blick nach zu wenig (keiner?) Gliederung in Funktionen. Die Verwendung von goto sollte im beschriebenen Fall zumindest besser sein, als die Verwendung einer riesigen noch undurchsichtigeren Schleife.
Aber ich kenne den Quelltext nicht und kann mir daher kein Urteil bilden.

Warum gliederst du das Anzeigen des Menues nicht einfach in einer Funktion aus und rufst diese an den verschiedenen Stellen auf?

Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: Label bei C
« Antwort #6 am: Mo 26.01.2009, 20:26:39 »
Wie geschreiben ist die Plattform Lynx.

Da gibts als C-Compiler nur den CC65

oder als Assembler den Lynxass

Aber davon abgesehen, das mit dem Aufruf des Menüs (das ist in einer ausgegliederten Methode)  funzt so nicht, da ich da zuviel Code erzeuge. Ich muss ja den noch das VarReset anders aufbauen....
Alles zu viel Codegedöns - hab ja für das Game nur 48K RAM inkl der eingebunden Grafiken und Buffers fürs nachladen.

Ich hab aber rumprobiert und bin drauf gekommen, das es tatsächlich nur innerhalb einer Methode funktioniert.
Ob das Compilerspezifisch oder allgemein bei C ist kann ich nicht sagen. Lynxopoly ist nunmal mein Hello World in C. Hab da auf anderen Plattformen noch nichts gemacht.

Gruß Matthias
Have you played Atari today ?!

gstoll

  • Gast
Re: Label bei C
« Antwort #7 am: Mo 26.01.2009, 20:37:28 »
Leer
« Letzte Änderung: Mo 27.09.2010, 07:39:49 von gstoll »

guest2291

  • Gast
Re: Label bei C
« Antwort #8 am: Mo 26.01.2009, 22:13:03 »
Also anders geht es immer! ;)

Na dann mal weiter viel Erfolg matashen. Das es fuer den Lynx nur einen einzigen C-Compiler gibt, wusste ich nicht. Fuer den habe ich noch nichts gemacht. Ich habe (leider) nicht mal einen.

Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: Label bei C
« Antwort #9 am: Mo 26.01.2009, 22:48:30 »
Zitat
Ich habe (leider) nicht mal einen.
unbedingt ändern... ich wüsst auch schon ein Spiel, da wurde gerade die Reset-Routine fertig  :P

läuft jetzt. Labels werden nur innerhalb der gleichen Methode unterstützt. longjmp macht wa anderes und ich hab nicht viel gelesen, da es den Befehl im CC65 nicht gibt.

Gruß Matthias
Have you played Atari today ?!

guest2291

  • Gast
Re: Label bei C
« Antwort #10 am: Mo 26.01.2009, 23:00:34 »
Also ich hatte schonmal 'nen Lynx geborgt fuer ein paar Wochen, ist schon geil so ein Teil! Nur leider fehlt mir momentan etwas die noetige Zeit und auch das Geld, ums nur zum in den Schrank legen zu kaufen.

Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: Label bei C
« Antwort #11 am: Mo 26.01.2009, 23:30:16 »
[OT]
Du sollst den Lynx ja auch nicht in den Schrank legen, sondern die Games spielen die ich progge  ::)
[/OT]

Gruß Matthias
Have you played Atari today ?!

guest2291

  • Gast
Re: Label bei C
« Antwort #12 am: Mo 26.01.2009, 23:58:15 »
[OT]
Waaaas steht da noch VOR dem Geld als Grund? ;)
[/OT]

Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: Label bei C
« Antwort #13 am: Di 27.01.2009, 00:00:48 »
Ichmach das ganz einfach, vor dem zu Bett gehen coden und im Bett dann zocken... meine Frau muss eh wegen Nachwuchs öfters aufstehen, da muss man sichja die Zeit vertreiben  ;D
Have you played Atari today ?!