c++ - प्रीप्रोसेसर निर्देश में##(डबल हैश) क्या करता है?



concatenation c-preprocessor (1)

## concatenation के लिए preprocessor ऑपरेटर है।

तो यदि आप उपयोग करते हैं

DEFINE_STAT(foo)

कोड में कहीं भी, इसे बदल दिया जाता है

struct FThreadSafeStaticStat<FStat_foo> StatPtr_foo;

आपके कोड संकलित होने से पहले।

इस बारे में समझाए जाने के लिए मेरे ब्लॉग पोस्ट से मेरा एक और उदाहरण यहां दिया गया है।

#include <stdio.h>

#define decode(s,t,u,m,p,e,d) m ## s ## u ## t
#define begin decode(a,n,i,m,a,t,e)

int begin()
{
    printf("Stumped?\n");
}

यह प्रोग्राम सफलतापूर्वक संकलित और निष्पादित करेगा, और निम्न आउटपुट का उत्पादन करेगा:

Stumped?

जब प्रीप्रोसेसर इस कोड पर काम करता है,

  • begin() को decode(a,n,i,m,a,t,e)() साथ प्रतिस्थापित किया गया है decode(a,n,i,m,a,t,e)()
  • decode(a,n,i,m,a,t,e)() को m ## a ## i ## n() साथ प्रतिस्थापित किया गया m ## a ## i ## n()
  • m ## a ## i ## n() को main() साथ प्रतिस्थापित किया गया है

इस प्रकार प्रभावी ढंग से, begin() को main() साथ प्रतिस्थापित किया जाता है।

#define DEFINE_STAT(Stat) \
struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat;

उपरोक्त रेखा अवास्तविक 4 से ली गई है, और मुझे पता है कि मैं इसे अवास्तविक मंचों पर पूछ सकता हूं, लेकिन मुझे लगता है कि यह एक सामान्य सी ++ प्रश्न है जो यहां पूछे जाने वाले वारंट हैं।

मैं समझता हूं कि पहली पंक्ति एक मैक्रो को परिभाषित करती है, हालांकि मैं सी ++ में प्रीप्रोसेसर शेनानिगन्स में अच्छी तरह से नहीं जानता हूं और इसलिए मैं वहां खो गया हूं। तर्क मुझे बैकस्लैश बताता है कि घोषणा अगले पंक्ति पर जारी है।

FThreadSafeStaticStat एक टेम्पलेट की तरह थोड़ा दिखता है, लेकिन वहां # चल रहा है और एक वाक्यविन्यास जिसे मैंने पहले कभी नहीं देखा है ++

क्या कोई मुझे बता सकता है इसका क्या अर्थ है? मैं समझता हूं कि आपके पास अवास्तविक 4 तक पहुंच नहीं हो सकती है, लेकिन यह सिर्फ सिंटैक्स है जिसे मैं समझ नहीं पा रहा हूं।





c-preprocessor