如何使这个示例代码工作?(在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中调用另一个宏函数。
答案 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****)
这只是一段代码,但还有很多。我不得不写很多东西,但最后它起作用了,可以为任何类型的数据编写算法和数据结构。