Les fonctions du compilateur
DescriptionSizeOf(Type)
La commande SizeOf permet de renvoyer la taille en octets que prendra une structure complexe (ne fonctionne pas avec les types de base tels que les 'long', les 'word' etc.), une interface ou même une variable. C'est très utile dans de nombreux cas, notamment lors de l'utilisation des commandes API.
Note : Dans le mode unicode un caractère occupe 2 octets. Dans le mode ASCII un caractère occupe 1 octet. Sizeof(Character) permet de renvoyer la taille en octets que prend un caractère selon le mode activé.
Exemple:
Structure Personne Nom.s Prenom.s Age.w EndStructure Debug "La taille d'une personne est "+Str(Sizeof(Personne))+" octets" ; Affichera 10 (4+4+2) John.Personne\Nom = "John" Debug SizeOf(John) ; Affichera 10 aussiNote: si une variable et une structure ont le même nom, la structure aura la priorité sur la variable.
DescriptionOffsetOf(Structure\Champ) OffsetOf(Interface\Fonction())
La commande OffsetOf permet de déterminer l'index d'un champ dans le cas d'une structure ou l'index d'une fonction dans le cas d'une interface (qui sera sa position en mémoire soit IndexDeLaFunction*4).Exemple:
Structure Personne Nom.s Prenom.s Age.w EndStructure Debug OffsetOf(Personne\Age) ; Affichera 8 car un 'string' occupe 4 octets en memoire Interface ITest Creer() Detruire(Options) EndInterface Debug OffsetOf(ITest\Detruire()) ; Affichera 4
DescriptionResultat = Subsystem(<expression texte constante>)
Subsystem permet de savoir si un sous-système est utilisé pour le programme en cours de compilation. Le nom de sous-système n'est pas sensible à la casse.Exemple:
CompilerIf Subsystem("OpenGL") Debug "Compilation avec le sous-système OpenGL" CompilerEndIf
DescriptionResultat = Defined(Nom, Type)
Defined détermine si un objet tel qu'une structure, interface, variables etc. est déjà défini dans le programme. Le paramètre 'Nom' doit être spécifié sans aucune forme de décoration (sans le '#' pour une constante, sans les '()' pour un tableau, une liste chaînée ou une procédure).
Le paramètre 'Type' peut être une des valeurs suivantes:#PB_Constant #PB_Variable #PB_Array #PB_LinkedList #PB_Structure #PB_Interface #PB_ProcedureExemple:
#PureConstante = 10 CompilerIf Defined(PureConstante, #PB_Constant) Debug "La constante 'PureConstante' est déjà déclarée" CompilerEndIf Test = 25 CompilerIf Defined(Test, #PB_Variable) Debug "La variable 'Test' est déjà déclarée" CompilerEndIf