4 Bugs

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Ja, eigentlich müßten sogar beide Beispiele laufen. Wenn die Procedure nicht deklariert ist, sagt das einem immerhin der Compiler. Das Gosub-Problem sagt einem niemand.

@ ts-soft: Sicher, daß für die Parameter Speicher reserviert wird? Ich dachte die werden auf dem Stack abgelegt...
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
DeltaG
Beiträge: 112
Registriert: 10.09.2004 18:15

Beitrag von DeltaG »

ts-soft hat geschrieben:@DeltaG
Verstehe ich nicht? :freak:
Labels werden immer gefunden, egal wo sie im Code stehen. Ist nur eine
Adresse

Proceduren müssen vorher declariert sein, da ja nicht nur eine
Speicheradresse bekannt sein muß, sondern auch Speicher für die Parameter
reserviert werden muß
Was gibt es da nicht zu verstehen?
Im ersten (Procedure-)Beispiel meldet der Kompiler einen Fehler, da er zum Zeitpunkt es Bearbeitens die Procedure 'machwas()' noch nicht kennt. Das typische Verhalten eines Einpaßkompilers. Der Ausweg dazu ist eben ein 'Declare'.
Es ist also ein Beispiel dafür, daß die Position im Quellcode darüber entscheidet, ob das Programm läuft oder nicht.
Die Ausgangsfrage war doch, ob die Position eines Befehls im Programmcode nur bei 'Gosub' im Verhältnis zu 'Return' wichtig ist in Verbindung mit der Aussage, daß mit einer Procedure solch ein Problem nicht auftritt.
Man müßte also zu 'Gosub' sagen, daß programmablauftechnisch ( :lol: ) einem 'Return' immer ein 'Gosub' vorausgehen muß, damit sich eine Rückkehradresse auf dem Stack befindet. (Daß man dieses auch mit anderen Mitteln erreichen kann ist auch klar.)
Bei einer Prozedur muß sich die Definition der Prozedur immer vor dem ersten Aufruf selbiger im Programmcode befinden, außer man benutzt ein 'Declare Procedure xxx()' vor dem ersten Aufruf. Warum der Kompiler letztendlich den Fehler meldet ist doch unerheblich. Es ging ja nur um die Positionen der Befehle.

:oops:
DeltaG
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

ZeHa hat geschrieben: @ ts-soft: Sicher, daß für die Parameter Speicher reserviert wird? Ich dachte die werden auf dem Stack abgelegt...
Ja, nach dem Aufruf werden sie wohl auf den Stack gelegt
Und ich denke mal der Rückgabetyp muß auch bekannt sein.

@DeltaG
Jetzt hab ich Deine Aussage verstanden, bzw. was Du erklären wolltest :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

ts-soft hat geschrieben:Ja, nach dem Aufruf werden sie wohl auf den Stack gelegt
Und ich denke mal der Rückgabetyp muß auch bekannt sein.
Ähm, man Pusht doch erst die parameter auf den Stack und ruft dann die Procedur auf, nich umgekehrt..... Umgekehrt könnte das doch garnich gehen....
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Auf jedenfall muß er die Anzahl der Parameter kennen. Was er damit macht,
ist mir eigentlich egal, weil es für mich als nichts ASM-Freak uninteressant ist
:mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

2.1 a$ und a.s sind NICHT identisch! Ein String den man also einmal a$ genannt hat kann man nicht mehr mit a.s ansprechen und umgekehrt! Eigentlich sollte sowas doch möglich sein, da die Datentypen absolut identisch sind! Die verschiedene Verhaltensweise fällt insbesondere bei Val(a) auf - Hier darf man auschließlich nur "Val(a$)" schreiben und nicht etwa "Val(a.s)" oder Val(a) selbst wenn vorher "Global a.s" festgelegt wurde. Wenns nicht zuändern ist, bitte diese Besonderheit im Handbuch explizit aufführen!
Habe dazu im Kapitel "Variablen" einen extra Abschnitt zur Erläuterung hinzugefügt. :)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Gesperrt