Как определить функцию с параметром, зависящим от отладки символа?

Я определил с помощью опции -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)

2

Решение

Вы можете объявить функцию по-другому …

 #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 );

Все они имеют свои достоинства, в зависимости от гибкости и количества измененных функций.

5

Другие решения

Вы не можете вставлять макрос препроцессора в линия. Им нужна отдельная линия. Таким образом, вы должны разбить это объявление на отдельные строки:

#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
);
4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector