我使用-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 ++编译器)
答案 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
);