使用宏显示宏的字符串化内容
use a macro to show the stringified content of a macro
我正在为Arduino编写代码。代码开始变长,所以我想使用一些调试宏,并能够在串行端口上显示一些调试信息。
例如,我有一些宏来定义我使用的串行端口:
#define SERIAL_GPS Serial1
#define SERIAL_IRIDIUM Serial2
#define SERIAL_VN100 Serial3
如何编写宏来显示我为每个端口使用的端口? 即一些将在调试串行端口上打印的宏:
Port for GPS: Serial1
Port for Iridium: Serial2
Port for VN100: Serial3
我试过:
#define SHOW_VAR_NAME(x) #x
䋰:
SERIAL_DEBUG.println(SHOW_VAR_NAME(SERIAL_GPS));
但这是在串行上打印的:
SERIAL_GPS
而不是:
Serial1
因为(我猜)宏预处理器只执行一次扫描。有什么聪明的方法可以让它工作吗?
注意:我在这里举一个简单的例子,但是有一些调试变量(例如,一些变量DEBUG_GPS,DEBUG_IRIDIUM等),我真的很想在板启动时打印: 我有很多单独的组件的调试选项,在启动时打印它们的状态将有助于跟踪哪些调试被激活或未激活(即使它们都收集在一个头文件中, 记住所有用户都不会有什么坏处)。
#
预处理器运算符可防止其操作数的扩展。您需要添加间接寻址层,以便进行扩展:
#define SHOW_VAR_NAME_(x) #x
#define SHOW_VAR_NAME(x) SHOW_VAR_NAME_(x)
此功能由 Boost.Preprocessor 的BOOST_PP_STRINGIZE
提供,如果您开始大量使用预处理器,我建议您使用它。
相关文章:
- 字符串-C++后显示的随机字符
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 显示字符串的集合和子集
- 在将字符插入 2d 字符串时如何不显示空字符?
- 两个数组,int 和 string,如何显示带有对应 int 的字符串?
- 为什么我的 cout 在输出中没有显示字符串?
- 为什么在为其分配编号后无法显示我的字符串值?
- 分段故障 11,从类函数显示动态 C 字符串
- 在大小为 10 的 char 数组中输入超过 10 个字符的字符串并输出时,它会显示整个数组而不是前 10 个数组.为什
- isPalindrome不显示输出,isPalindrome函数未使用字符串输入作为字符串参数进行测试
- 输出显示多个带整数的字符串值
- 字符串显示上的智能感知:npos = 18446744
- 如何从显示板将字符显示为字符串?
- 插入了 C++ 数组字符串数据,但在显示输出时不显示
- 使用宏显示宏的字符串化内容
- 我将如何将数组的显示从数字更改为字符串C++
- 如何让我的构造函数和函数工作,以便我的 main() 能够同时显示字符串和 int 数据
- C 我将如何在字符串中显示字符作为数字
- 如何使用另一个字符串显示三个浮点数的最大值?
- 如何比较"4A4B4C"(字符串显示十六进制值)实际字符串"JKL"