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

How I can evaluate arithmetic expression of an macro function to pass to another macro function in C Preprocessor?

本文关键字:函数 另一个 处理器 预处理 何评估 评估      更新时间:2023-10-16

如何使此示例代码工作?(在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

但是编译器给我一个错误:

GCC:错误: 在此范围中未声明" print_3" ...

GCC:注意: 在扩展宏" dec_and_print" dec_and_print(3)

我如何减少参数?

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

感谢所有。

没有办法做我想做的事。预处理器无法评估表达式,在串联##。

中使用结果。

所以我更改使用递归的代码,并手中写所有组合,例如:

致电DefinePointer(T)

definepointer_1(t)

定义t * ->呼叫definepointer_2(t *)

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

这只是一块代码,但是还有很多。我必须写很多东西,但最终它有效,并且可以为任何类型的数据编写算法和数据结构。