Hallo, in C++ kann man die Funktionsnamen überlagern, indem man mehrere Funktionen gleichen Namens, aber mit unterschiedlicher Parameterliste anlegt. Das ist im normalen C ja eigentlich nicht möglich. Eigentlich... Wie ist das mit Makros in C? Wie werden diese vom Compiler unterschieden? Nur anhand des Namens oder zusätzlich auch anhand der Parameterliste? Dann könnte man das Problem mit Makros lösen. Gruß Michael
Makros werden soweit ich weiß nur anhand des Namens unterschieden. Anstelle so einen langen Beitrag zu schreiben hättest du es aber auch einfach schnell selbst ausprobieren können. ;-)
Hi Chris, anhand des Smilies am Ende deiner Nachricht gehe ich davon aus, dass der letzte Satz nicht böse gemeint ist. Genauso wie diese beiden. grins Du hast zwar recht, aber erstens schreib ich gerade nicht von meinem eigenen Rechner, und zweitens solltest du bedenken, dass vielleicht irgendjemand mal die gleiche Frage haben könnte. Wenn er dann noch fähig ist, die Forumssuche zu verwenden, dann ist dem Betreffenden schon geholfen... Und vielleicht weiss ja jemand was zu dem Thema, was wir BEIDE nicht wissen... Gruß Michael
C kennt keine Überladung von Funktionen, eine Mehrfachdefinition des gleichen Funktionsnamens mit unterschiedlichen Argumenten wird daher als Fehler betrachtet. Obendrein erzeugt ein C-Compiler auf Objektebene keine Informationen über einer Funktion übergebene Parameter; die dem Linker übergebenen Symbole entsprechen dem Funktionsnamen mit vorangestelltem Unterstrich. Auch aufgrund dieser Tatsache kann eine Überladung von Funktionen nicht erfolgen, da sonst der Linker mehrere identische Symbole vorgesetzt bekäme. Für C++ wurden für genau diesen Zweck die "dekorierten" Symbole eingeführt, die in codierter Form Informationen über die Argumente enthalten, so daß zwei Funktionen gleichen Namens mit unterschiedlichen Argumenten aus Sicht des Linkers unterschiedliche Namen haben. So kann auch für C++ der gleiche Linker verwendet werden, wie für C. Der Präprozessor ist hierbei auch keine Hilfe, denn der macht nur simplen Textersatz, mehr nicht. In einer "translation unit" gilt ein mit #define definiertes Macro genau so lange, bis ein anderes mit dem gleichen Namen angelegt wird. Argumente werden dabei gar nicht unterschieden. Also: #define bla(a) {a=0;} wird von #define bla "fusel" überschrieben.
@Rufus: Danke für die Informationen. Das gibt auch mal einen guten Einblick, wie die ganzen Sachen (Compiler, Linker, usw.) funktionieren... Danke Ralf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.