我在网上浏览了很多有关宏字符串化的示例,但是找不到类似的东西。
我目前的定义如下。
#define PIN_A (0+1)
#define PIN_B (0+2)
#define PIN_C (0+3)
#define str(x) #x
#define xstr(x) str(x)
#define PIN_DEF(x) { #x, xstr(PIN_ ## x) }
的输出
PIN_DEF(A)
将成为
{ "A", "(0+1)" }
但是,我真正需要的是
{ "A", "1" }
有可能吗? :/
答案 0 :(得分:0)
Yes,有可能。
#include <boost/preprocessor/arithmetic.hpp>
#define PIN_A BOOST_PP_ADD(0,1)
#define PIN_B BOOST_PP_ADD(0,2)
#define PIN_C BOOST_PP_ADD(0,3)
#define str(x) #x
#define xstr(x) str(x)
#define PIN_DEF(x) { #x, xstr(PIN_##x) }
PIN_DEF(A)
请记住,boost预处理器的算术宏在256
处饱和。
预处理程序也可以计算表达式,但是唯一的方法是调用预处理程序条件指令(例如#if