Frage deutsch
~~~~~~~~~~~~~~
Mein Programm lässt sich zwar interpretieren, aber nicht kompilieren!
Bzw.: Das EXE-Programm bricht mit Fehler ab oder
läuft fehlerhaft!
 

Question English
~~~~~~~~~~~~~~
Help! My BAS programm can be interpreted, but the compilation or the execution of the compiled EXE program aborts with an error message! ?
 

Antwort 1
~~~~~~~~
[ von folgenden Teilnehmern im QB-Forum, 4.8.2003 - 2.2.2006 :
- Tomtitom (
sperlings1*web.de )
- Aneril (
Aneril*freesurf.ch )
- Ch@rly (
karlpircher*hotmail.com )
-
Frank the Man ( frank*headarrangement.com )
-
JoePopo
- Michael Frey (
comet.frey*bluewin.ch ), per Mail
-
Thomas Antoni
]
 
Im Folgenden findest Du die häufigsten Ursachen dafür, dass ein interpretiertes, mit der F5-Taste gestartetes Programm einwandfrei läuft, aber beim Compilieren oder beim Ausführen des EXE-Programms Fehler auftreten.
 
 
*** Pfadnamen nicht richtig angegeben
Stelle in der QuickBasic-Entwicklungsumgebung alle Pfade im Menüpunkt [Optionen | Suchpfade festlegen] korrekt ein. Du kannst fürs Erste dort überall denjenigen Pfadnamen eingeben, unter dem QB.EXE selber hinterlegt ist.
 
 
*** Ausdruck zu komplex
Der Compiler scheitert gelegentlich an komplexen Ausdrücken, die der Interpreter noch verkraftet.
 
Die Fehlermeldung "Ausdruck zu komplex" kommt, wenn eine
Quellcode-Zeile zu lang ist, es muss aber nicht diejenige sein, auf die die Fehlermeldung zeigt. Oder die Fehlerursache liegt darin, dass (wer hätte das gedacht) ein Ausdruck zu komplex ist. Das bedeutet, daß QB einen Ausdruck nicht verarbeiten kann, weil z.B., zu viele Klammerebenen verschachtelt werden. Ein einfaches Beispiel:
 
PRINT (1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+1))))))))))))))))
 
Wenn Du versucht das kompilieren wills, wirft Dir der Compiler ein "Ausdruck ist zu komplex" an den Kopf. Abhilfe kann man schaffen, indem man den Ausdruck aufteilt, z.B. so:
 
a = (1+(1+(1+(1+(1+1)))))
b = a + (1+(1+(1+(1+(1+1)))))
c = b + (1+(1+(1+(1+(1+1)))))
PRINT c
 
 
*** Dimensionierung zu groß
Eine Dimensionierung ist zu groß (z.b. DIM x(10000), y(10000), z(10000)). Dies kann umgangen werden mit zahl = 10000 DIM x(zahl), y(zahl), z(zahl)
 
 
*** Zuwenig Speicherplatz
Normalerweise kann eine BAS-Datei bis zu 64 kB kompiliert werden, doch ich habe die Erfahrung gemacht, das es immer schwieriger wird eine Datei mit mehr als 50 kB zu kompilieren, es treten dann immer mehr unbekannte Fehler auf. Teilweise kann man diesen Effekt mit Modulen hinauszögern. Die SUBs dürfen auch nicht zu groß sein (nicht mehr als ~600 Zeilen).
 
Du hast mehr Speicherplatz zur Verfügung, wenn Du Dein Programm mit dem externen Compiler BC.EXE statt innerhalb der QuickBASIC-Entwicklungsumgebung kompilierst.
 
 
*** Maximale Größe von kompilierten Dateien
Mein größtes Programm ist kompiliert 186 KB groß!
 
 
*** Stack-Überlauf (Überlauf des Stapelspeichers)
Wenn man in immer tiefer geschachtelte "Unter-SUBs" springt, ohne eine alte zu beenden, stürzt die EXE häufig ab. Das kann man meistens mit CLEAR ,, 5000 unterbinden. Dadurch werden alle Variablen gelöscht und der für den Stack zur Verfügung stehende Speicherplatz auf 5000 Byte erhöht. in QB 7.1 (PDS) gibt es dafür übrigens den Befehl STACK.
 
 
*** zuviele Übergabeparameter beim Aufruf einer SUB/FUNCTION
Ein weiterer Grund weshalb ein Programm mit F5 im Interpreter läuft, sich aber nicht kompilieren lässt ist eine zu grosse Menge an Variablen, die an eine SUB/FUNCTION übergeben werden. Ab 40-50 Variablen (auch Feldvariablen) kann
QB 4.5 nicht mehr kompilieren.
 
 
*** Fehler in unbenutzten Befehlssequenzen
Wenn in einem Programmteil, ein Fehler ist, dieser aber nie abgearbeitet wird, so funktioniert das Programm mit F5 interpretiert ohne Problem, kann aber nicht kompiliert werden.
 
Beispiel: In einer SUB steht die Zeile a = b / 0. Solange die Sub nicht angesprungen wird, funktioniert beim interpretierten Programm alles einwandfrei. Beim Compilieren kommt es aberzu dem Fehler "Division durch Null".
 
 
*** Zu lange Variablennamen
Manchmal liegt das nur daran, dass einige Quellsprache-Zeilen oder einige Variablennamen zu lang sind. Sebastian Steiner berichtet z.B., dass nach dem Ersetzen des Variablennamens NaechsterBoden$ durch NaB$ alles problemlos lief. Auch zu lange Kommentarzeilen können einen Bug hervorrufen, obwohl der Compiler sie eigentlich überlesen müsste.
 
 
*** Reservierten Dateinamen benutzt
Eine weitere mögliche Ursache besteht darin, dass QuickBASIC im Gegensatz zu QBasic bestimmte Dateinamen nicht "verträgt", z.B. USER.BAS oder COM7.BAS.
 
 
*** Sprungmarke/Zeilennummer "0" nicht erlaubt
Der QuickBASIC Compiler mag die -> Zeilennummer oder -> Sprungmarke "0" bzw. den GOTO 0 Befehl nicht. Nimm also die 0 vor der ersten Befehlszeile weg und pack davor ein anderes Label. Und die Sprungmarke GOTO 0 muss auch angepasst werden, also z.B.
ANFANG:
CLS
1 ...
2 ...
'...
20 GOTO ANFANG
 
Versuche mal, das folgende programm mit QuickBASIC 4.5 zu kompilieren:
0
PRINT "Hallo Welt"
SLEEP 1
GOTO 0
 
Es lässt sich ausführen (interpetieren), aber zum Verrecken nicht kompilieren. durch das Ersetzten von 0 durch a geht es aber problemlos:
a:
PRINT "Hallo Welt"
SLEEP 1
GOTO a
 
Kleiner Fehler, grösse Wirkung! Das Poblem tritt meistens dann auf, wenn jemand ein altes ->
GW-BASIC - Programm mit QuickBASIC kompilieren will.
.
*** Maximale Zeilenlänge überschritten
Außerdem nimmt der Compiler es mit der maximal erlaubte Zeilenlänge von 255 Zeichen
angeblich etwas genauer als der Interpreter.
 
 
*** INCLUDE-Datei ist geöffnet
Wenn beim Erstellen der EXE eine mit $INCLUDE eingefügte Datei versehentlich bereits in die QB-Entwicklungsumgebung geladen ist, entsteht ein fehlerbehaftetes oder nicht ausführbares Programm. Leider erfolgt aber beim Kompilieren und Linken keine Fehlermeldung
 
 
*** Wenn alles nicht hilft ...
Tipp 1:
Versuch es mal mit der Option [X] Debug-Code erstellen
im Menüpunkt "Ausführen | EXE-Datei erstellen ..."
 
Tipp 2:
Wenn das Erstellen der EXE-Datei mit der Fehlermeldung "Data Memory overflow" abgebrochen wird, dann ist der Gesamt-Speichernbedarf deiner Variablen zu groß. Versuche mal Folgendes: Schreibe am Anfang des Programms '$DYNAMIC und starte QuickBASIC mit dem Parameter /Ah . Laut QB-Onlinehilfe ermöglicht der Parameter /AH "... dynamischen Feldern, die Datensätze, Zeichenketten fester Länge oder numerischen Daten enthalten, jeweils größer als 64K zu sein".
 
 
 
 

Answer 2
~~~~~~~~~
[ von
http://lightning.prohosting.com/~chinar/ ]
If this is an out of memory program, it shouldn't be too hard. When running qb 4.5 or even PDS, use the /ah switch. This lets the two compilers access a lot more memory>P?
 
 

[ The QBasic-MonsterFAQ --- Start Page: www.antonis.de/faq ]