Selv om løsningen fungerer, foretrekker jeg følgende tilnærming:
#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;
}
Merk : Funksjonen er makro, er Funksjon selve navnet på funksjonen
Dette fungerer ved å definere makrofunksjonen (a) til et kall til funksjon (const char *) når MACRO er aktivert. På den annen side, når MACRO er deaktivert, samtaler til FUNKSJON (a) vil bli definert til ingenting.
Jeg har en tendens til å foretrekke denne metoden siden det ville være lettere å abstrahere bort makroen brukes til å definere din oppfordring fra makro definere funksjonsdefinisjonen. Du har kanskje tilfeller hvor i utløserfunksjon du trenger bare å fjerne noen av samtalene for å fungere. I dette tilfelle er fortsatt nødvendig definisjonen av funksjonen (). For eksempel:
#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;
}