我正在为字符串解析器创建一个包装器,它将字符串转换为基本类型。我正在为它编写单元测试,所以我需要这些原始类型的极值的字符串表示,因此需要对标准宏进行字符串化,例如INT_MIN和INT_MAX。
正常的stringify宏看起来像这样:
#define STRINGIFY(content) #content
#define EXPAND_AND_STRINGIFY(input) STRINGIFY(input)
适用于EXPAND_AND_STRINGIFY(SHRT_MAX)
,它将扩展为“32767”。
但是,当它与EXPAND_AND_STRINGIFY(SHRT_MIN)
一起使用时,它会扩展为“(-32767 -1)”,因为#define SHRT_MIN (-SHRT_MAX - 1)
。这不是我想要的。有没有可能的解决方法呢?
答案 0 :(得分:4)
不,没有办法让预处理器宏评估算术表达式。
您可以让预处理器进行算术计算,但仅限于#if
的上下文,它允许您评估布尔表达式。您可以使用该功能而非费力地输出数字,但只能在#include
d文件中使用预处理器输入,因为您无法将#if
放入宏中。
你没有提及为什么你想要字符串化INT_MIN
,所以如果确实存在替代品,我就无法提供替代品。
但是,最有可能的做法是在运行时使用snprintf
简单地生成字符串。