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, einer LinkedList oder einer Map) angegeben werden.
Der Parameter 'Typ' kann einer der folgenden Werte sein:#PB_Constant #PB_Variable #PB_Array #PB_LinkedList #PB_Map #PB_Structure #PB_Interface #PB_Procedure #PB_Function #PB_OSFunctionBeispiel:
#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
BeschreibungInitializeStructure(*Zeiger, Struktur)
InitializeStructure initialisiert den angegebenen strukturierten Speicherbereich. Dies ist nützlich, wenn die Struktur dynamische Objekte wie Arrays, Listen oder Maps enthält, welche intern von PureBasic zugewiesen werden müssen. 'Struktur' ist der Name der Struktur, welche zum Durchführen der Initialisierung verwendet werden soll. Es gibt keine interne Überprüfung, um sicherzugehen, dass die Struktur zum Speicherbereich passt. Diese Funktion ist nur für fortgeschrittene Anwender und sollte mit Vorsicht verwendet werden.Beispiel:
Structure People Name$ Age.l List Friends.s() EndStructure *Student.People = AllocateMemory(SizeOf(People)) InitializeStructure(*Student, People) ; Jetzt ist die Liste fertig zur Benutzung ; AddElement(*Student\Friends()) *Student\Friends() = "John" AddElement(*Student\Friends()) *Student\Friends() = "Yann" ; Den Listen-Inhalt ausgeben ; ForEach *Student\Friends() Debug *Student\Friends() Next
BeschreibungCopyStructure(*Quelle, *Ziel, Struktur)
CopyStructure kopiert den Speicher eines strukturierten Speicherbereichs in einen anderen.
Dies ist nützlich beim Umgang mit dynamischen Zuweisungen, mittels Zeiger. Jedes Feld wird dupliziert, auch Array, Liste und Map. Es gibt keine interne Überprüfung, dass die Struktur auch zu den beiden Speicherbereichen passt. Diese Funktion ist nur für fortgeschrittene Anwender und sollte mit Vorsicht verwendet werden.Beispiel:
Structure People Name$ LastName$ Map Friends$() Age.l EndStructure Student.People\Name$ = "Paul" Student\LastName$ = "Morito" Student\Friends$("Tom") = "Jones" Student\Friends$("Jim") = "Doe" CopyStructure(@Student, @StudentCopy.People, People) Debug StudentCopy\Name$ Debug StudentCopy\LastName$ Debug StudentCopy\Friends$("Tom") Debug StudentCopy\Friends$("Jim")
BeschreibungErgebnis = ClearStructure(*Zeiger, Struktur)
ClearStructure gibt den Speicher eines strukturierten Speicherbereichs frei. Dies ist nützlich, wenn die Struktur Strings beinhaltet, welche intern von PureBasic allokiert wurden. 'Struktur' ist der Name der Struktur, welche zum Ausführen des Löschens verwendet werden soll. Es gibt keine interne Überprüfung, um sicherzustellen, dass die Struktur zum Speicherbereich passt. Diese Funktion ist nur für fortgeschrittene Anwender und sollte mit Bedacht verwendet werden.Beispiel:
Structure People Name$ LastName$ Age.l EndStructure Student.People\Name$ = "Paul" Student\LastName$ = "Morito" Student\Age = 10 ClearStructure(@Student, People) ; Wird leere Strings ausgeben, da die gesamte Struktur gelöscht wurde. Alle anderen Felder wurden auf Null zurückgesetzt. ; Debug Student\Name$ Debug Student\LastName$ Debug Student\Age