Auch wenn Ihre Lösung funktioniert, ziehe ich folgende Vorgehensweise vor:
#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;
}
Hinweis : FUNKTIONS das Makro ist, Funktion ist der tatsächliche Name der Funktion
Dies funktioniert durch die Makro-Funktion zu definieren (a) zu einem Aufruf von Funktion (const char *), wenn MACRO aktiviert ist. Auf der anderen Seite, wenn MACRO deaktiviert ist, ruft Funktion (a) wird auf nichts festgelegt werden.
Ich neige dazu, diese Methode zu bevorzugen, da es das Makro leichter zu abstrahieren verwendet würde Ihren Anruf von der Makro-Definition Ihrer Funktionsdefinition zu definieren. Sie könnten Fälle, wo im Release-Modus nur einige der Anrufe entfernen müssen funktionieren. In diesem Fall ist die Definition der Funktion () ist nach wie vor erforderlich. Beispielsweise:
#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;
}