Távolítsuk el a feladatukat ellátni fordítási definiálásával, mint egy üres makró

szavazat
5

Ebben a példában kódot a makró vagy meghatározott vagy megjegyzésbe a programozó, hogy eltávolítsuk a funkciót a kiadott szoftver.

#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;
}

Van valami baj ezzel?

A kérdést 06/05/2017 20:07
felhasználó
Más nyelveken...                            


2 válasz

szavazat
0

Működni fog. De az egész szimbóluma eltávolítjuk ezen a módon. Inkább a következő módszert.

#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;
}

A következő megváltozott:

  • A #ifmost összehasonlítja a logikai. Az IDE most képes megtalálni, ahol MACROmeg van határozva, minden esetben. (jobb klikk, meg definíció)
  • Akkor, a változó MACRO2, változtatni az egész értelmét Function. Például egy kiadás összeállított változat tartalmazhat egy nyomtatási fájlba vagy a rendszer napló.
  • Mindig lesz egy szimbólum Function, még ha nem csinál semmit, még a lefordított kódot. Ennek az az előnye, hogy a húr literálok az érv is számít a méret statisztika. Beágyazott fejlesztő találom ezt a fontos.

Nyilvánvaló, hogy ez részben a preferencia az, aki kézműves kódot.

Válaszolt 06/05/2017 20:20
a forrás felhasználó

szavazat
0

Annak ellenére, hogy a megoldás működik, én inkább a következő megközelítést:

#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;
}

Megjegyzés : A funkció a makró, funkció az aktuális függvény neve

Ez úgy működik, hogy meghatározza a makró funkció (a) a hívás funkció (const char *), ha a makro engedélyezve van. Másrészt, ha a makro van tiltva, felhívja a FUNCTION (a) fogják meghatározni, hogy semmi.

Hajlok arra, hogy inkább ezt a módszert, mert könnyebb lenne elvonatkoztatni a makro meghatározására használt hívását a makro meghatározó a függvény definíciójában. Lehet, hogy olyan esetben, amikor a kioldási módban csak akkor kell eltávolítani néhány hívások funkciót. Ebben az esetben a meghatározása Function () is szükség van. Például:

#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;
}
Válaszolt 06/05/2017 22:29
a forrás felhasználó

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