Ga naar hoofdinhoud

Trefwoorden: Directives

Directives zijn instructies voor de compiler die bepalen hoe jouw broncode wordt geïnterpreteerd.

#assert

Controleert of een constante expressie waar is en stopt anders de compilatie.

#define MOO 10
#assert MOO > 5

Dit compileert zonder problemen.

#define MOO 1
#assert MOO > 5

Dit compileert niet en geeft een fatale fout, vergelijkbaar met:

#define MOO 1
#if MOO <= 5
#error MOO-controle mislukt
#endif

#assert zal een fout in de trant van het volgende geven:

Assertion failed: 1 > 5

#define

#define is een tekstvervangingsdirective: waar het eerste symbool van de define voorkomt, wordt de rest ingevoegd.

#define MOO 7
printf("%d", MOO);

Wordt:

printf("%d", 7);

Defines verdwijnen bij decompilatie omdat ze vóór het compileren verwerkt zijn (preprocessing). Defines hoeven geen getallen te bevatten en kunnen multi-line zijn met een backslash-escape.

#else

Zoals else, maar dan voor #if in plaats van if.

#elseif

Zoals else if, maar dan voor #if.

#define MOO 10

#if MOO == 9
printf("if");
#elseif MOO == 8
printf("else if");
#else
printf("else");
#endif

#emit

Niet in de pawn-lang.pdf-tabel, maar bestaat wel. Hiermee kun je AMX-opcodes inline in je code plaatsen. Syntax: #emit <opcode> <argument>. <argument> kan een rationaal getal, integer of (lokaal/globaal) symbool zijn.

#endif

Beëindigt een #if-blok (vergelijkbaar met een sluitende accolade).

#endinput, #endscript

Stopt het inlezen van een enkel bestand.

#error

Stopt de compiler direct met een eigen foutmelding. Zie ook #assert.

#if

De preprocessor-tegenhanger van if. Hiermee kies je wat wel/niet meegecompileerd wordt. De expressie moet constant zijn.

#define LIMIT 10

#if LIMIT < 10
#error Limiet te laag
#endif

#include

Voegt de inhoud van een bestand in op de plek van de include. Er zijn relatieve includes met aanhalingstekens en systeem-includes met < > die zoeken in de include-map.

#include "me.pwn"
#include <me>

#pragma

Een verzameling opties die het gedrag van je script/compilatie beïnvloeden. Voor SA:MP/open.mp relevante voorbeelden:

NaamWaardenOmschrijving
codepagenaam/waardeStelt de Unicode-codepage in voor strings.
compress1/0Niet ondersteund in SA:MP.
deprecatedsymboolWaarschuwing bij gebruik van het symbool.
dynamicwaarde (meestal 2^n)Grootte van stack/heap in cellen.
librarydll-naamGeeft de bibliotheek met natives aan.
pack1/0Verwisselt de betekenis van !"" en "" (packed strings).
tabsizewaardeTabgrootte voor indentatie-waarschuwingen (SA:MP: 4).
unusedsymboolOnderdrukt "symbol is never used" voor het symbool.

Deprecated-voorbeeld

new
gOldVariable = 5;

#pragma deprecated gOldVariable

main() {printf("%d", gOldVariable);}

#tryinclude

Zoals #include, maar faalt niet als het bestand ontbreekt. Handig voor optionele plugins/includes.

#undef

Verwijdert een eerder gedefinieerde macro of constant.

#define MOO 10
printf("%d", MOO);
#undef MOO
printf("%d", MOO); // compileert niet meer