## is a string concatenator, so if you call the CAT(Logging, SLB_ALGORITHM) macro CAT(Logging, SLB_ALGORITHM) from SLB_LOGGING_ALGORITHM , this will combine the Logging string with the SLB_ALGORITHM string, SLB_ALGORITHM .: LoggingSLB_ALGORITHM , which most likely will not be what you want.
When calling the CMB(Logging, SLB_ALGORITHM) macro CMB(Logging, SLB_ALGORITHM) from SLB_LOGGING_ALGORITHM instead, the preprocessor first expands Logging and SLB_ALGORITHM (calls CMB() ), then concatenates the expanded lines (calling CAT() ).
source share