![](/img/trans.png)
[英]How can I evaluate an argument in a preprocessor macro to pass to sizeof?
[英]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.