【问题标题】:Passing BOOST_PP_DEC to another macro将 BOOST_PP_DEC 传递给另一个宏
【发布时间】: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


【解决方案1】:
#define FOO( N ) BOOST_PP_CAT(Bar ## N ## _Bar, BOOST_PP_DEC(N))

【讨论】:

    猜你喜欢
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 2013-12-10
    • 2013-07-24
    相关资源
    最近更新 更多