निम्नलिखित मैक्रो पर विचार करें:क्यों है अविवेक की जरूरत
#define CAT(X, Y) X ## Y
#define CMB(A, B) CAT(A, B)
#define SLB_LOGGING_ALGORITHM CMB(Logging, SLB_ALGORITHM)
जहां SLB_ALGORITHM
एक परिभाषित पूर्व प्रोसेसर प्रतीक है।
यदि मैं का उपयोग सीधे CMB
, SLB_ALGORITHM
के बजाय सीधे नहीं किया जाता है। यह मामला क्यों है और संकेत कैसे वास्तव में मदद करता है?
मुझे अभी भी यह नहीं पता कि यह वास्तव में कैसे काम करता है। जब 'सीएटी' का सीधे उपयोग किया जाता है, तो पहले प्रतिस्थापन को 'सीएटी (लॉगिंग, एसएलबी_एएलजीओआरआईटीएमएम)' का उत्पादन करना चाहिए, जिसमें '##' नहीं है ... – AlwaysLearning
जब 'सीएटी (लॉगिंग, एसएलबी_एएलजीओआरआईटीएमएम)' सीधे इस्तेमाल किया जाता है 'SLB_ALGORITHM' केवल एक बार मैक्रो में पारित किया जाता है, इसलिए यह 'लॉगिंग ## SLB_ALGORITHM' में अनुवाद करता है जिसमें '##' होता है। – Tomer