如何评估宏函数的算术表达式以传递给C预处理器中的另一个宏函数?

时间:2017-10-04 03:21:01

标签: c++ macros c-preprocessor variadic-macros

如何使这个示例代码工作?(在C或C ++中)

cout就是例如。我想评估正确的递减数字

#define PRINT_1 std::cout<<"One : " <<1;
#define PRINT_2 std::cout<<"Two : " <<2;

#define DEC_AND_PRINT(number) PRINT_##number-1

当我致电DEC_AND_PRINT(3)时,我希望如此:

DEC_AND_PRINT(3)  PRINT_##(3-1) -> PRINT_2 -> std::cout<<"Two : "<<2

但编译器给我一个错误:

  

海湾合作委员会:错误:   'PRINT_3'未在此范围内声明...

     海湾合作委员会:注意:   扩展宏'DEC_AND_PRINT'DEC_AND_PRINT(3)

我如何减少争论?

基本上,我正在尝试使宏函数获取一个数字,并在语法_name_of_macro_decremented_number中调用另一个宏函数。

1 个答案:

答案 0 :(得分:0)

感谢所有人。

没有办法做我想做的事情。预处理器无法评估表达式,并在结束时使用结果##。

所以我改变代码以使用递归,并编写所有组合,如:

CALL DefinePointer(T)

DefinePointer_1(T)

定义T * - &gt;调用DefinePointer_2(T *)

                DefinePointer_2( T*)
                Define T**  -> Call DefinePointer_3(T**)
                                    DefinePointer_3(T**)
                                  Define T*** -> Call DefinePointer_4(T****)                     

这只是一段代码,但还有很多。我不得不写很多东西,但最后它起作用了,可以为任何类型的数据编写算法和数据结构。