A makrók lényege, hogy apró feladatokban megkönnyítse a programozót, tehát egy-egy rutint gyorsan el tudjon végezni, anélkül hogy külön funkciókkal tömné tele a modját. Ám van egy pár fontos dolog, aminél az ember - ha nem gondolkodik eléggé - elakadhat. Nem hiszem hogy mindenkinek egetrengetõ, de ha csak egy embert is ki tudtam ezzel segíteni, megérte.
Elég sokat fáradozhat egy kezdõ programozó azon, hogy a PAWN preprocesszorával hogy lehet egy értelmes többmûveletes matematikai képletet összerakni, mivel hasonlóan a többi programnyelvhez, alapvetõen a PAWN sem képes a mûveleti sorrend megértésére, így nekivágtunk a vakvilágnak, és teszteltünk pár makró megoldást, hogy bemutassuk, hogy kell ezt megoldani:
#define HOZZAAD(%0,%1) %0 + %1
main()
{
printf(\"%d\", HOZZAAD(3, 3) * 7);
}
A preprocesszor ezt a következõnek fogja fordítani: 3+3*7=42 ami nem egyenlõ a várt 24-gyel. Rendben, ez túl alap volt, próbáljunk ki zárójelket használni a kódban:
#define SZOROZ(%0,%1) (%0 * %1)
main()
{
printf(\"%d\", SZOROZ(3 + 3, 7));
}
Eredmény? Az összes tag zárójelben marad! [ (3 + 3 * 7) ], tehát az eredmény mindig 42! A megoldás: használjunk duplazárójelet.
#define SZOROZ(%0,%1) ((%0) + (%1))
main() {
printf(\"%d\", SZOROZ(3, 3*7));
}
A preprocesszor ezt a megfelelõ képlettel fogja lefordítani ((3)+(3*7))=24. Ezért nagyon fontos hogy matematikai mûveleteknél
hogy a mûvelet egészét zárójelbe rakjuk makróíráskor.