एक खाली मैक्रो के रूप में यह परिभाषित करते हुए संकलन के दौरान एक समारोह निकालें

वोट
5

इस उदाहरण कोड में किसी मैक्रो या तो परिभाषित या जारी किया सॉफ्टवेयर से एक समारोह को हटाने के लिए प्रोग्रामर द्वारा बाहर टिप्पणी की है।

#include <stdio.h>

#define MACRO //or omitted

#ifdef MACRO
    void Function(const char* str)
    {
        printf(%s\n, str);
    }

#else
    #define Function(str)

#endif

int main(void)
{
    Function(hello world);
    getchar();
    return 0;
}

क्या इस के साथ गलत है?

06/05/2017 को 20:07
उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
0

यह काम करेगा। लेकिन पूरे प्रतीक इस तरह से हटा दिया जाता है। मैं निम्न विधि पसंद करते हैं।

#include <stdio.h>

#define MACRO    1

#if MACRO
    void Function(const char* str)
    {
        printf("%s\n", str);
    }

#else
    void Function(const char *str){}

#endif

int main(void)
{
    Function("hello world");
    getchar();
    return 0;
}

निम्नलिखित बदल गया है:

  • #ifअब एक बूलियन तुलना करती है। आपका आईडीई अब कहां मिल करने में सक्षम है MACROसभी मामलों में परिभाषित किया गया है,। (राइट क्लिक करें, परिभाषा)
  • तुम्हें पता है, को बदलने के द्वारा कर सकते हैं MACROकरने के लिए 2, के पूरे अर्थ बदल Function। उदाहरण के लिए, एक रिलीज संकलित संस्करण फ़ाइल या सिस्टम लॉग में एक प्रिंट हो सकता है।
  • वहाँ हमेशा के लिए एक प्रतीक हो जाएगा Function, भले ही वह, कुछ नहीं करता है भी संकलित कोड में। यह लाभ यह है कि बहस में स्ट्रिंग शाब्दिक अभी भी आकार आंकड़ों के गिनती है। एक एम्बेडेड डेवलपर के रूप में, मैं इस महत्वपूर्ण पाते हैं।

जाहिर है, इस आंशिक रूप से एक है जो कोड शिल्प के वरीयता है।

06/05/2017 को 20:20
का स्रोत उपयोगकर्ता

वोट
0

भले ही आपके समाधान काम करता है, मैं निम्नलिखित प्रक्रिया अपनाते हैं:

#include <stdio.h>

#define MACRO //or omitted

#ifdef MACRO
#define FUNCTION(a) Function(a);
#else
#define FUNCTION(a)
#endif

#ifdef MACRO
    void Function(const char* str)
    {
        printf("%s\n", str);
    }
#endif

int main(void)
{
    FUNCTION("hello world")
    getchar();
    return 0;
}

नोट : function मैक्रो है, समारोह समारोह का वास्तविक नाम है

इस समारोह के लिए एक कॉल (स्थिरांक चार *) जब मैक्रो सक्षम किया गया है करने के लिए शन (क) को परिभाषित करते हुए काम करता है। दूसरी ओर, जब मैक्रो अक्षम है, कार्य करने के लिए (क) कुछ भी नहीं करने के लिए परिभाषित किया जाएगा कहते हैं।

मैं इस विधि को पसंद करते हैं, क्योंकि यह दूर सार मैक्रो अपने समारोह परिभाषा को परिभाषित करने से आपकी कॉल परिभाषित किया जाता मैक्रो आसान होगा करते हैं। आप ऐसे मामलों में जहां रिलीज़ मोड में आप केवल उन्हीं कॉल के कुछ फंक्शन को हटाने की जरूरत हो सकता है। उस मामले में समारोह की परिभाषा () अभी भी आवश्यक है। उदाहरण के लिए:

#include <stdio.h>

#define DEBUG //or omitted

#ifdef DEBUG
#define FUNCTION(a) Function(a);
#else
#define FUNCTION(a)
#endif

void Function(const char* str)
{
    printf("%s\n", str);
}

int main(void)
{
    // Call function with Hello World only in debug
    FUNCTION("hello world")
    getchar();

    // Call function with goodbye world in both debug and release
    Function("goodbye world");
    return 0;
}
06/05/2017 को 22:29
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more