atari-home.de - Foren

Software => Coding => Thema gestartet von: matashen am So 25.01.2009, 18:45:23

Titel: Label bei C
Beitrag von: matashen 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
Titel: Re: Label bei C
Beitrag von: guest2291 am So 25.01.2009, 20:59:42
Erwartungsgemaesse Nutzung von Labels wird im ersten Treffer (http://www.google.com/search?hl=en&q=goto+c) gezeigt. (goto)
Titel: Re: Label bei C
Beitrag von: matashen 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

Titel: Re: Label bei C
Beitrag von: guest2291 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?
Titel: Re: Label bei C
Beitrag von: matashen 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
Titel: Re: Label bei C
Beitrag von: guest2291 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?
Titel: Re: Label bei C
Beitrag von: matashen 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
Titel: Re: Label bei C
Beitrag von: gstoll am Mo 26.01.2009, 20:37:28
Leer
Titel: Re: Label bei C
Beitrag von: guest2291 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.
Titel: Re: Label bei C
Beitrag von: matashen 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
Titel: Re: Label bei C
Beitrag von: guest2291 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.
Titel: Re: Label bei C
Beitrag von: matashen 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
Titel: Re: Label bei C
Beitrag von: guest2291 am Mo 26.01.2009, 23:58:15
[OT]
Waaaas steht da noch VOR dem Geld als Grund? ;)
[/OT]
Titel: Re: Label bei C
Beitrag von: matashen 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