Compiler Funktionen
BeschreibungGroesse = SizeOf(Typ)
SizeOf kann benutzt werden, um die Größe jeder komplexen Struktur (funktioniert nicht mit den einfachen eingebauten Typen wie Word und Fließkomma), Interface oder sogar Variablen zu ermitteln. Dies kann auf vielen Gebieten nützlich sein, um den Speicherverbrauch für Operationen, Verwendung von API-Befehlen, etc. zu ermitteln.
Hinweis: Im Unicode-Modus verwendet ein Zeichen 2 Bytes. Im Ascii-Modus verwendet ein Zeichen 1 Byte. Sizeof(Zeichen) ermöglicht die Rückgabe der Größe (in Bytes), welche von einem Zeichen in Abhängigkeit vom aktiven Modus belegt wird.Beispiel:
Structure Person Name.s Vorname.s Alter.w EndStructure Debug "Die Größe meines Freundes ist "+Str(Sizeof(Person))+" Bytes" ; wird 10 (4+4+2) ergeben John.Person\Name = "John" Debug SizeOf(John) ; wird auch 10 ergebenHinweis: Wenn eine Variable und eine Struktur den gleichen Namen haben, dann hat die Struktur Vorrang gegenüber der Variable.
BeschreibungIndex = OffsetOf(Struktur\Feld) Index = OffsetOf(Interface\Funktion())
OffsetOf kann verwendet werden, um den Index eines Struktur-Feldes oder den Index einer Interface-Funktion herauszufinden. Bei der Verwendung mit einem Interface ist der Funktions-Index der Speicher-Offset, es gilt deshalb IndexOfTheFunction*4.Beispiel:
Structure Person Name.s Vorname.s Alter.w EndStructure Debug OffsetOf(Person\Alter) ; wird 8 ergeben, da ein String(-Pointer) 4 Byte im Speicher belegt Interface ITest Create() Destroy(Flags) EndInterface Debug OffsetOf(ITest\Destroy()) ; wird 4 ergeben
BeschreibungErgebnis = Subsystem(<Konstanter String Ausdruck>)
Subsystem kann verwendet werden, um herauszufinden, ob ein Subsystem für das zu kompilierende Programm verwendet wird. Der Name des Subsystems ist nicht "Case-Sensitive", d.h. Groß-/Kleinschreibung ist egal.Beispiel:
CompilerIf Subsystem("OpenGL") Debug "Kompilierung mit dem OpenGL Subsystem" CompilerEndIf
BeschreibungErgebnis = Defined(Name, Typ)
Defined überprüft, ob ein bestimmtes Objekt innerhalb des Quellcodes wie Struktur, Interface, Variable bereits definiert ist oder nicht.
Der Parameter 'Name' muss ohne jeden Zusatz (z.B. ohne '#' für eine Konstante, ohne '()' für ein Array oder LinkedList) angegeben werden.
Der Parameter 'Typ' kann einer der folgenden Werte sein:#PB_Constant #PB_Variable #PB_Array #PB_LinkedList #PB_Structure #PB_Interface #PB_ProcedureBeispiel:
#PureConstant = 10 CompilerIf Defined(PureConstant, #PB_Constant) Debug "Konstante 'PureConstant' ist bereits deklariert" CompilerEndIf Test = 25 CompilerIf Defined(Test, #PB_Variable) Debug "Variable 'Test' ist bereits deklariert" CompilerEndIf