Nach cplusplus.com, die Syntax eines Makros zu definieren ist:Präprozessormakro ersatzlos C++
#define identifier replacement
Allerdings habe ich manchmal auf einer Makrodefinition stolpern, die keinen Ersatz enthält. Zum Beispiel in afxwin.h gibt es die folgende Präprozessordefinition:
#define afx_msg // intentional placeholder
Meine Fragen:
- Was zur Compile-Zeit passiert, wenn eine Präprozessordefinition, die keinen Ersatz verwendet hat? Wird es einfach ignoriert? Zum Beispiel, wird die Linie
afx_msg void OnAddButton();
void OnAddButton();
? - Was ist der Zweck der Verwendung von Präprozessor ohne Ersatz? Ist es einfach, den Code klarer zu machen?
Wenn Sie es ausprobiert haben, haben Sie Weizen entdeckt? –
Sie können sich einfach '# define' als einfache Such- und Ersetzungsfunktion vorstellen, die vor der Kompilierung angewendet wurde. Versuchen Sie einfach, afx_msg zu suchen und ersetzen Sie sie durch nichts. – Catalin