Я определил с помощью опции -D компилятора символ отладки: -DDEBUG_VALUE
Я хотел бы функцию, в которой наличие параметра зависит от определения или менее флаг символа отладки.
А именно, если определено DEBUG_VALUE, у меня есть
my_function(int parameter1 ,int my_parameter_dependant)
иначе
my_function(int parameter1)
В этом случае
my_function(int parameter1 #ifdef DEBUG_VALUE , int my_parameter_dependant #endif)
я получил
error: stray ‘#’ in program
error: expected ‘,’ or ‘...’ before ‘ifdef’
Как я могу решить?
Заранее спасибо!
(Я на компиляторе C ++ в системе Unix)
Вы можете объявить функцию по-другому …
#if defined( DEBUG_VALUE )
void my_function( int parameter1, int my_parameter_dependent );
#else
void my_function( int parameter1 );
#endif
Создать встроенный макрос
# if defined( DEBUG_VALUE )
#define DEPENDENT_PARAM( x ) x
# else
#define DEPENDENT_PARAM( x )
#endif
void my_function( int parameter1 DEPENDENT_PARAM(, int my_parameter_dependent) );
Это означает, что текст в макросе обрабатывается препроцессором и скрыт
Или вы можете объявить отладочные данные
#if defined( DEBUG_VALUE )
#define EXTRA_DEBUG , int my_parameter_dependent
#else
#define EXTRA_DEBUG
#endif
void my_function( int parameter1 EXTRA_DEBUG );
Все они имеют свои достоинства, в зависимости от гибкости и количества измененных функций.
Вы не можете вставлять макрос препроцессора в линия. Им нужна отдельная линия. Таким образом, вы должны разбить это объявление на отдельные строки:
#ifdef DEBUG_VALUE
void my_function(int parameter1, int my_parameter_dependant);
#else
void my_function(int parameter1);
#endif
Или, если вы хотите стать умным и DRY, использовать большую гибкость C ++ в отношении операторов и пробелов:
void my_function(int parameter1
#ifdef DEBUG_VALUE
, int my_parameter_dependant
#endif
);