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

时间:2017-06-16 17:23:15

标签: c++ c++11 compiler-errors compiler-flags compiler-options

我使用-D编译器选项定义了一个符号debug:-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 ++编译器)

2 个答案:

答案 0 :(得分:5)

你可以用不同的方式宣布这个功能......

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

它们都有其优点,具体取决于灵活性和改变了多少功能。

答案 1 :(得分:4)

您无法在行中嵌入预处理器宏。他们需要自己的专用线。因此,您必须将此声明分解为单独的行:

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