#define oder eigene Funktion
-
Hallo,
ich brauche für ein Programm (dass ich nur so zu Übungszwecken schreiben möchte) eine doppelt verkettete Liste. Auf diese Liste kann man nun u.a. die Operationen push_front (am Anfang einfügen), push_back (ans Ende einfügen), insert_before und insert_after. Nun sind ja push_front und push_back eigentlich nur Spezialfälle von insert_before bzw. insert_after. Wie geht man nun vor? Schreibt man dafür trotzdem eine (kleine) Funktion oder 'reicht' ein #define? Macht es einen Unterschied, welche Wahl ich treffe?void push_front(list_head* lst,list_node* node) { insert_before(list_head->first,node); } /* oder */ #define push_front(lst,node) insert_before(lst->first,node)
-
Hallo,
Macht es einen Unterschied, welche Wahl ich treffe?
klar, schließlich filtert/ersetzt der Präprozessor _vor_ dem Kompilieren alles, d.h. du hast z.B. beim Debuggen keine Ahnung, dass push_front aufgerufen wurde.
Des Weiteren kann es Performanceunterschiede zwischen Funktionen und Makros (bei gleichem "Inhalt") geben, ist von Fall zu Fall verschieden, hier dürfte es aber keine übermäßigen Unterschiede geben.Ich persönlich mag Makros eh nicht besonders, also empfehle ich eine Funktion, sieht schöner und in sich geschlossen aus.
MfG
GPC
-
Ganz klar eigene Funktion!
-
Nimm dies:
inline void push_front(list_head* lst,list_node* node) { insert_before(list_head->first,node); }