Gibt es in PureBasic einen Variablen-Typ Boolean?
Nein! True und False sind in PureBasic nur Integerzahlen mit den Konstanten: #True und #False, deren Werte 1 bzw. 0 sind.
In Logischen Ausdrücken wird jeder Wert ungleich 0 (also nicht nur #True oder 1, sondern auch -10, 123, ...) als Wahr gewertet!
• Boolean •
Darf man mit Logischen Ausdrücken rechnen?
Offiziell nicht! Logische Ausdrücke haben in PureBasic entweder das Ergebnis 0, wenn der Ausdruck falsch ist, oder nicht 0.
Die Annahme, dass Wahr immer gleich 1 ist (was in PureBasic also #True ist), muss nicht immer zutreffen.
Logische Ausdrücke sollten immer in einem If Block stehen, und erst in der Fallunterscheidung dann einer Variablen ein Wert zugeordnet werden.
• Operator NOT • #True is only 1, not all True • Vergleichs-Ausdruck liefert keinen boolschen Wert •
Changelog: 12.04.2010 00:38 Link bei Boolean hinzugefügt. --STARGÅTE
12.04.2010 13:22 Bug-Fix. --STARGÅTE 13.04.2010 14:08 If zur Reference verlinkt. --Vera
Zuletzt geändert von FAQ - Team am 14.04.2010 02:12, insgesamt 11-mal geändert.
Kann man in PureBasic mehrzeilige Anweisungen benutzen?
Nein! In PureBasic gibt es kein Abschluß-Zeichen für eine Anweisung (wie in anderen Sprachen das ";").
Trotzdem gibt es selbst entwickelte Tools, die das ermöglichen:
• Little Purebasic Preprocessor - LPP • Mehrzeilige Anweisungen •
Ich habe eine GUI mit dem Visual Designer erstellt und bekomme in der IDE eine Warnung wegen CreateGadgetList(), ist das weiter schlimm?
Schlimm ist es nicht, CreateGadgetList() hat seit v4.00 aber keine Funktion mehr und kann getrost gelöscht werden.
Gibt es einen PureBasic-Decompiler?
Nein! Zwar kann man den durch 2-Pass-Compilierung entstandenen Assemblercode disassemblieren,
aber den originalen PB-Code bekommt man keinesfalls, da den PureBasic-Befehlen, durch den Optimierungsvorgang während des Compilens, keine eindeutigen ASM-Codegruppen zugeordnet sind.
• Maschinencode => PureBasic •
Gibt es einen Befehl, der verbietet, undeklarierte Variablen zu benutzen?
Ja, dieser nennt sich EnableExplicit und sollte ausnahmslos bei jedem Projekt benutzt werden, weil dadurch die Fehlerquote durch Schreibfehler in Variablen gesenkt wird.
Beim Erstellen einer DLL bekomme ich einen Assembler Error. Was mache ich falsch?
DLLs und statische Libs mögen keine Static-Variablen. Also, alles was Static ist, am Besten zu Protected machen.
• PureBasic Assembler error •
Kann man zufällige Fließkommazahlen erzeugen?
Eine native Funktion sucht man vergebens, allerdings hat STARGÅTE ein Makro dafür geschrieben:
• Wie erzeugt man zufällige Kommazahlen? •
Gibt es einen Unterschied zwischen Makros und Prozeduren?
Ein Makro (Macro) ist ein Platzhalter für etwas Code (ein Schlüsselwort, eine Zeile oder auch viele Zeilen), welcher (beim Kompilieren) direkt an der Stelle, wo das Makro aufgerufen wird, in den Programmcode eingefügt wird. In dieser Beziehung unterscheidet es sich von Prozeduren (Procedure), da Prozeduren beim Aufrufen nicht den Code duplizieren und erst zur Laufzeit ausgeführt werden.
• Frage zu Macros •
Wieso geben die Winkelfunktionen (Sinus, Cosinus, Tangens, u.a.) falsche Werte zurück?
Bei Sin(), Cos(), Tan() und den anderen Winkelfunktionen muss der Winkel nicht in Grad (°), sondern im Bogenmaß übergeben werden.
Zur Umrechnung von Grad in Bogenmaß gibt es die Funktion Radian() oder man rechnet mal #Pi/180
• Winkelfunktionen geben falsche Werte zurück •
Wieso ist das angegebene Sprite nicht initialisiert, obwohl ich es geladen habe? LoadSprite() liefert immer einen Rückgabewert. Ist dieser 0, so konnte das Sprite nicht geladen (initialisiert) werden. Das liegt ggf. daran, dass der Dateiname falsch ist, oder bei einem *.png, *.jpg, ... der entsprechende Use...ImageDecoder() nicht aufgerufen wurde. Darum sollte dieser Rückgabewert möglichst immer überprüft werden!
Wie kann man mit ExamineDirectory() auch Unterverzeichnisse auslesen?
Das erreicht man mit einem rekursiven Prozeduraufruf. Das heißt, dass man sich eine Prozedur zum Auslesen eines Ordners schreibt, die sich bei einem gefundenen Unterordner wieder selbst aufruft und auch diesen ausliest.
• Rekursion • Verzeichnis mit allen Unterverzeichnissen scannen? •
Gadget auf ImageGadget verschwindet
Auch wenn sich das ImageGadget gut als Hintergrundbild für ein Fenster eignet, so ist es in PureBasic nicht erlaubt.
Der Grund ist: Die PureBasic-Gadgets unterstützen kein Z-Layer.
Eine mögliche Lösung ist das ImageGadget mittels DisableGadget() zu deaktivieren
• Gadget auf ImageGadget verschwindet •