Verwenden Sie Inline-Funktionen (zwingen Sie Inlining, wenn Sie es wirklich meinen) und bleiben Sie dabei! Dies wird effizienter (erhalten Sie nur inline, wenn es Leistung bringt, wenn Sie für Perf optimieren) und wartbar. Sie verlieren viel durch die Verwendung von Makros: Typprüfung & Sicherheit.
Makros existieren nicht für den Compiler, sie tun nur für den Präprozessor. Dieser macht Textersetzungen, ohne nach Nebenwirkungen zu suchen. Also Makros werden eigentlich nie aufgerufen und Sie können nicht in ihnen debuggen. Egal wie Sie ein Makro programmieren, Missbrauch ist immer möglich. Wie in diesem Beispiel:
#define SQUARE(a) ((a)*(a))
Hinweis bereits die (
`) 'zum Schutz gegen Ersatz wie SQUARE (3 + 2).Aber sie schützen nicht vor:
Man würde erwarten, dass es 4 sein wird, aber Sie am Ende mit 6, die nicht wirklich quadratisch ist. Wenn es auf int b = (++a)*(++a);
erweitert wird, hätten Sie keine Probleme mit Inlinefunktionen.
Beachten Sie, dass die Implementierung einer Inlined-Funktion für den Compiler an den Stellen sichtbar sein muss, an denen Sie ihn verwenden. Auch das Debuggen wird für den unerfahrenen Benutzer merkwürdig sein: Da es viele Instanzen einer Inlinefunktion gibt, erhalten Sie eine riesige Liste von Methoden, wenn Sie beispielsweise den Ausführungspunkt an einen anderen Ort verschieben möchten.
Habe ich gesagt, dass die Makros sehr kompliziert sind? Ich möchte nur ein oder zwei Ebenen erweitern, nicht alle Makros (sonst ist es einfach nicht lesbar) ... während des Debuggens. – liori
Ja, es ist scheiße, aber es gibt keine gute Lösung, die ich kenne. Normalerweise muss ich mich dabei selbst ein wenig herumhacken, indem ich den Code entweder manuell ersetze, um die gewünschten Layer zu erhalten, oder über eine vollständig vorverarbeitete Datei. –
@ JimBuck Ich kann scheinen nicht zu finden 'Preprocessed File generieren 'in Visual Studio 2013. – sami1592