【发布时间】:2012-04-29 22:35:27
【问题描述】:
假设我想取消字符串化应该将"text" 转换为text 的宏参数。
#define UN_STRINGIFY(x) /* some macro magic here */
现在调用此宏将从其参数中删除 ""
UN_STRINGIFY("text") // results in ----> text
这将与宏字符串化相反:
#define STRINGIFY(x) #x
这可能吗,还是我在玩宏观邪恶?
【问题讨论】:
-
如果可能的话,你想做什么?
-
这是不可能的;出于好奇,预期用途是什么?
-
好吧,通常我只会使用 stringify,但我正在重构一些宏并且不想更改调用模式。
#define THIS_MACRO(sringParam) const char* var = stringParam;将更改为#define THIS_MACRO(stringParam) const char* un##stringParam = stringParam;。 -
我只会使用正则表达式搜索和替换在源代码级别修复它们并完成它......
-
另一种可能的用途是传入用于构造标识符的“字符串”,其中一些可能具有现有的 CPP 宏定义。由于您只想使用这些“字符串”来构建实际的标识符名称,因此您不希望现有的 CPP 宏对其进行操作。 #ifdef/#undef/push_macro 是实现此目的的一种方法,但在可读性方面相当嘈杂。