【发布时间】:2014-07-07 12:38:49
【问题描述】:
我正在尝试完成类似的事情:
#define FOO( N ) Bar ## N ## _ Bar ## N - 1
所以说FOO( 2 ) = Bar2_Bar1
问题出在N-1那里。预处理器不会做这样的数学运算,但 boost 有方便的 BOOST_PP_DEC 宏来减少输入。
如果我现在尝试以下操作:
#define __FOO( N, N_MINUS_ONE ) BAR ## N _ ## Bar ## N_MINUS_ONE
#define FOO( N ) __FOO( N, BOOST_PP_DEC( N ) )
我原以为它会起作用,但它实际上直接粘贴了宏名称并且不评估它。
奇怪的是,如果我只是这样做:
#define TEST( N ) BOOST_PP_DEC( N )
它似乎工作。我到底错过了什么?
【问题讨论】:
-
实际上在玩了一些之后,它看起来像是通过一个中间宏修复它的热情所以 #define FOO( N ) _FOO( N, BOOST_PP_DEC( N ) ) #define _FOO( N, N2 ) __FOO( N, N2 ) #define __FOO( N, N2 ) ...
-
不相关,但不要对任何名称使用双前导下划线,或对全局名称使用单前导下划线,包括预处理器宏。这些名称由 C 规范保留用于内部编译器/c 库名称。
标签: c macros boost-preprocessor