Si consideri la seguente macro:Perché il riferimento indiretto necessario
#define CAT(X, Y) X ## Y
#define CMB(A, B) CAT(A, B)
#define SLB_LOGGING_ALGORITHM CMB(Logging, SLB_ALGORITHM)
dove SLB_ALGORITHM
è un simbolo pre-processore definito.
Se utilizzo solo CAT
direttamente anziché CMB
, SLB_ALGORITHM
non viene espanso. Perché questo è il caso e in che modo esattamente l'induzione indiretta aiuta?
Ancora non capisco come funziona esattamente. Quando 'CAT' è usato direttamente, la prima sostituzione dovrebbe produrre' CAT (Logging, SLB_ALGORITHM) ', che non ha' ## 'o ... – AlwaysLearning
Quando' CAT (Logging, SLB_ALGORITHM) 'viene usato direttamente' SLB_ALGORITHM' viene passato solo una volta a una macro, quindi si traduce in 'Logging ## SLB_ALGORITHM' che contiene' ## '. – Tomer