Даже если ваше решение работает, я предпочитаю следующий подход:
#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;
}
Примечание : Функция макро, функция является фактическим именем функции
Это работает путем определения FUNCTION макросъемки (а) для вызова функции (Const символ *), когда MACRO включена. С другой стороны, когда MACRO отключен, вызов функции (а) будет определяться ни к чему.
Я предпочитаю этот метод, так как это было бы легче абстрагироваться от макро используется для определения вашего звонка из макроса, определяющего ваше определение функции. Вы, возможно, случаи, когда в режиме выпуска, нужно только, чтобы удалить некоторые из вызовов функции. В этом случае определение функции () по-прежнему требуется. Например:
#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;
}