如何使用依赖于符号调试的参数定义函数?

How define a function with a parameter dependant from a symbol debug?

我用 -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’

我该如何解决? 提前致谢!

(我在Unix系统上使用C++编译器)

您不能在 行中嵌入预处理器宏。他们需要自己的专用线路。所以你必须把这个声明分成不同的行:

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

您可以用不同的方式声明函数...

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

各有千秋,就看灵活性和改了多少功能了。