繁体   English   中英

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

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

如何使此示例代码正常工作?(在C或C ++中)

举例来说,我想评估正确的减数

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM