Çözümünüz çalışır halde ben şu yaklaşımı tercih:
#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 : FONKSİYON makro olduğunu Fonksiyon işlevinin fiili adıdır
Bu MAKRO etkindir Fonksiyonu bir çağrı (const char *) makro FUNCTION (a) tanımlayarak çalışır. Öte yandan, MAKRO devre dışı bırakıldığında, (a) hiçbir şey belirlenecektir İŞLEVİ çağırır.
Bunun senin işlevi tanımı tanımlayan makro çağrı tanımlamak için kullanılan makro uzakta soyut daha kolay olacağını beri bu yöntemi tercih etme eğilimindedir. Sürüm modunda yalnızca aramaların bazı İşlev çıkarmanız gerekir vakaları olabilir. Bu durumda Fonksiyon tanımı () hala gereklidir. Örneğin:
#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;
}