Warf hat geschrieben: Mo 27. Mär 2023, 00:12
Das problem ist das Makros nur in der Unit gültig sind in der sie Definiert wurden. Ist bei C übrigens genauso, nur das C header files mit #include als Textdatei eingebunden werden, und somit das Makro in jeder datei die die .h datei included Repliziert wird.
Der Grund ist ganz einfach, durch einbinden von Units über "uses" werden Lediglich die Sprachkonstrukte die im Interface teil Definiert sind nutzbar gemacht. Makros sind teil des Präprozessors, und sind nicht direkt Sprachkonstrukte selbst, sondern sind zu dem Zeitpunkt zu dem das Unit interface veröffentlicht wird bereits aufgelöst.
Prinzipiell unterstützt FPC Cross-Unit-Makros, da dies für Mac Pascal Code benötigt wird. Allerdings ist dies nur für Units aktiviert, die den
MacPas-Modus nutzen, um eventuellen Problemen mit TP/Delphi Code vorzubeugen (es kommt dabei auf den Modus der
verwendenden Unit an, nicht auf den der
verwendeten Unit). Erreicht wird dies darüber, dass Makros in separaten Symboltabellen in ihren Units abgelegt werden, die je Modus mit zum Symboltabellenstapel für Makros hinzugefügt werden oder nicht.