Nawet jeśli rozwiązanie działa, wolę następujące podejście:
#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;
}
Uwaga : Funkcja ta jest makro, funkcja jest rzeczywista nazwa funkcji
Działa to poprzez zdefiniowanie funkcji makro (A) do wywołania funkcji (const char *) gdy MAKRO jest włączony. Z drugiej strony, gdy makro jest wyłączony, wzywa do FUNKCJA (a) zostaną określone na niczym.
I preferują tę metodę, ponieważ byłoby łatwiej streszczenie dala makro używane do definiowania połączenia z makro definiowania definicji funkcji. Można mieć przypadki, w których w trybie zwolnienia wystarczy tylko usunąć niektóre z połączeń do funkcji. W takim przypadku wymagane jest jeszcze definicja function (). Na przykład:
#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;
}