|
|
MakroMakros sind eine mehr oder weniger große Anzahl von Anweisungen, die unter einer Kurzbezeichnung zu einer Gruppe zusammengefasst sind und als Einheit verwendbar sind. Makros werden i.d.R von Assemblersprachen angeboten, sind aber auch in einigen höheren Programmiersprachen verfügbar etwa in C/C++ durch den C-Präprozessor. Schließlich gibt es auch reine Makrosprachen (etwa den Makroprozessor m4 von Unix/Linux), die als Werkzeug zur systematischen Transformation von Textdateien eingesetzt werden können. Hinsichtlich eines Makros ist zu unterscheiden zwischen dessen Definition, i.d.R. einmalig und VOR der ersten Verwendung (evtl. auch in Include-Files) und dessen Verwendungen (0-mal bis beliebig oft).
[Bearbeiten] Allgemeines zu MacrosBesonders flexibel sind parametrisierbare Makros. Die Makro-Definition ist dann als eine Schablone zu sehen, bei der einige Stellen noch offen gehalten wurden, um sie erst später, bei der Makro-Verwendung zu füllen. Bei der Programmierung haben parametrisierbare Makros eine gewisse Ähnlichkeit zu Unterprogrammen (mit Parametern), werden aber anders als diese zum Zeitpunkt der Übersetzung ausgeführt und hinsichtlich der Parameterwerte festgelegt. Bei der Programmierung von Mikrocontrollern ist es mitunter erforderlich, zwischen der Verwendung von Unterprogrammen und Makros abzuwägen. Universell wiederverwendbare, und deshalb in einer gewissen Umfang noch konfigurierbare Programmteile können in Form von Makros effizienter als Unterprogramme sein. Allerdings müssen die folgenden Voraussetzungen bestehen:
[Bearbeiten] Macros vs. Inline-FunktionenAnstatt ein Macro zu verwenden, kann eine Funktion auch mit dem Schlüsselwort "inline" versehen werden. Dann erzeugt der Compiler keinen Funktionsaufruf, sondern fügt den Code der Inline-Funktion direkt an dieser Stelle ein, an der die Funktion aufgerufen wird. [Bearbeiten] Vorteile von Inline Funktionen
[Bearbeiten] Vorteile von Macros
[Bearbeiten] Also jetzt Macros oder Inline-Funktionen?Es ist wohl zum Teil eine Glaubenfrage über die sich lange vortrefflich streiten lässt. Die einen sagen, dass eben schon immer Macros verwendet wurden und sie zu C einfach dazu gehören (und zu Assembler sowieso). Die anderen sehen sie eher als Altlast aus Zeiten an, in der Code in Assember geschrieben wurde, die Compiler schlecht waren und ein Goto nichts böses war.... Die Erfahrung bei grösseren Projekten (vor allem im Nicht-uC oder 32-bit uC-Bereich) zeigt aber, dass der Einsatz von Macro mit Bedacht erfolgen sollte. Je abstrakter das Modul wird, desto weniger Macros sollten verwendet werden. Trotzdem sind Macros gerade dann sinnvoll, wenn man direkt an der Hardware programmiert und weit weg von strukturiert objektorientierter Programmierung ist. Um den einen oder anderen von Hand optimierten Hack kommt man dann einfach nicht herum, weil die der Compiler das sonst einfach doch nicht schafft. Trotzdem sei an dieser Stelle gewarnt, sich in vermeintlich tollen Macro zu verrennen, ohne über das ganze mal eine Nacht zu überschlafen. Jede vermeintliche Optimierung über Macro-Hacks sollte am Ende auch wirklich eine Optimierung sein. An dieser Stelle erwartet der Autor hitzige Debatten und praktische Beispiele darüber, was Compiler einfach nicht hinbekommen... :) [Bearbeiten] Siehe auch |