Unterschied bei #define zur "normalen" Definition
-
- Vanilla
- Drunken Officer
-
-
Der Unterscheid ist einfach, dass #define ein Preprocessor Command ist.
Heißt: beim Compilen der Funktion wird einfach jedes __MEINMACRO mit dem Gegenüber des #defines eingefügt.Beispiel:
Heißt im Umkehrschluss: ein #define ist eine Konstante, während du eine Variable My_var jederzeit überschreiben kannst (ausgenommen compileFinal).
Mit #define setzt man nur Werte (keine Variablen) ein, die nicht mehr geändert werden sollen (also nach dem Abspeichern der sqf-File).
SQF unterstützt keine "richtigen" Konstanten (wieder: compileFinal isses einfach nicht dafür; nur, wenn z.B. ein vom Server generierter Wert nicht mehr geändert werden soll [z.B. Session-Keys o.ä]).
Klar kann man auch #define __MyVar My_Var machen, das erinnert mich dann aber eher an Tonic's AltisLife Logik und ist äußert selten empfehlenswert.Kleines Anwendungsbeispiel:
CDu möchtest nicht, dass dafür extra eine Variable verwendet wird. Weil: sie wird nicht verändert, ergo nicht gebraucht.
Eine private Variable macht es hier z.B. auch keinen Sinn (wird nicht verändert -> Konstante).
Mit einer globalen Variable verhunzt am Ende ein Scriptkiddy (my_var = "ololol";) oder ein Fehler anderswo deine Funktion. Macht man auch einfach nicht, wenn es nicht gebraucht wird (z.B. wenn du diese Variable explizit global für alle Funktionen ändern möchtest).Weiterführender Link zum ArmA3-Preprocessor: https://community.bistudio.com/wiki/PreProcessor_Commands