Betrachten Sie das folgende Makro:Warum benötigt der Indirektionsoperator ist
#define CAT(X, Y) X ## Y
#define CMB(A, B) CAT(A, B)
#define SLB_LOGGING_ALGORITHM CMB(Logging, SLB_ALGORITHM)
wo SLB_ALGORITHM
ist eine definierte Pre-Prozessor-Symbol. Wenn ich einfach CAT
anstelle von CMB
verwende, wird SLB_ALGORITHM
nicht erweitert. Warum ist das der Fall und wie genau hilft die Umleitung?
Ich verstehe immer noch nicht, wie das genau funktioniert. Wenn 'CAT' direkt verwendet wird, sollte die erste Substitution' CAT (Logging, SLB_ALGORITHM) 'erzeugen, die nicht' ## 'hat. – AlwaysLearning
Wenn' CAT (Logging, SLB_ALGORITHM) 'direkt benutzt wird' SLB_ALGORITHM' wird nur einmal an ein Makro übergeben, so dass es in 'Logging ## SLB_ALGORITHM' übersetzt wird, das' ## 'enthält. – Tomer