Chiar dacă soluția funcționează, prefer următoarea abordare:
#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;
}
Notă : funcția este macro, funcția este numele real al funcției
Aceasta funcționează prin definirea funcție macro (a) un apel la funcții (char const *), atunci când MACRO este activat. Pe de altă parte, atunci când MACRO este dezactivată, apelurile către FUNCTION (a) va fi definit la nimic.
Am tendința de a prefera aceasta metoda, deoarece ar fi mai ușor să abstractiza macro folosit pentru a defini apelul de macro definirea definiției funcției. S-ar putea avea cazuri în care în modul de eliberare ai nevoie doar pentru a elimina unele dintre apeluri de funcții. În acest caz, este încă necesară definirea function (). De exemplu:
#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;
}