In den Makrodefinitionen unten, ist es 2 Dereferenzierungsebenen vor dem eigentlichen Einfügen Betrieb:Warum 2 Dereferenzierungsebenen in Definition von Makro-## Operation
#define MACRO_JOIN(a, b) MACRO_JOIN1(a, b)
#define MACRO_JOIN1(a, b) MACRO_JOIN2(a, b)
#define MACRO_JOIN2(a, b) a##b
Ich weiß, dass wir MACRO_JOIN1
brauchen, weil es kein Einfügen oder Stringing, damit seine Argumente zuerst erweitert werden können.
Aber was genau ist der Zweck der zweiten Indirektion MACRO_JOIN
? In welchen Situationen wird MACRO_JOIN
funktionieren, aber MACRO_JOIN1
wird fehlschlagen?
erstaunliche Erklärung! Ich muss diese speziellen Testfälle auf meinen cpp Implementierungen versuchen ... – chqrlie
Ich sehe. Ich dachte, dass sein Zweck es wäre, etwas zu "zwingen", aber ich habe nie über diese Art von Anwendungen nachgedacht. Noch eine Frage: In deinem Beispiel ist das Makro 'NOEXPAND()' fast nutzlos. Gibt es einen Fall, in dem wir davon Gebrauch machen können? –
@ PJ.Hades Wie ich schon sagte, werden Makrodefinitionen, bei denen es einen Unterschied macht, generell als schlechter Stil betrachtet. Jedes Beispiel, das ich mir vorstellen könnte, wäre genauso nutzlos wie 'NOEXPAND()'. Ich würde also sagen, mach dir keine Sorgen darüber, es sei denn, du findest tatsächlich einen Anwendungsfall mit Makrodefinitionen, die du verwendest. – hvd