Même si fonctionne votre solution, je préfère l'approche suivante:
#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;
}
Remarque : La fonction est la macro, la fonction est le nom réel de la fonction
Cela fonctionne en définissant la fonction macro (a) à un appel à la fonction (const char *) lorsque MACRO est activé. D'autre part, lorsque MACRO est désactivé, les appels à la fonction (a) sera définie à rien.
J'ai tendance à préférer cette méthode, car il serait plus facile à abstraire la macro utilisée pour définir l'appel de la macro définition de votre définition de la fonction. Vous pourriez avoir des cas où, en mode de déclenchement, vous ne devez supprimer certains des appels à la fonction. Dans ce cas, la définition de la fonction () est toujours nécessaire. Par exemple:
#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;
}