有没有办法删除 C 宏中的引号
Is there a way to remove quotes in a C macro?
假设我想取消字符串化宏参数,该参数应该将"text"
转换为text
。
#define UN_STRINGIFY(x) /* some macro magic here */
现在调用此宏将从其参数中删除""
UN_STRINGIFY("text") // results in ----> text
这与宏字符串化相反:
#define STRINGIFY(x) #x
这可能吗,还是我在玩宏观邪恶?
这
是不可能的。这可能是一件好事:如果你传递一个字符串,你假设你可以把几乎所有东西都放进去。取消字符串化会突然导致编译器真正关心该字符串的内容。
我已经
多次提出这个问题,但仍然无法理解。请考虑以下示例:
#define FOO(x) x
// FOO( destringify("string x;")) // no way
auto f = "string x;";
FOO(string x;) // hm whats the problem?
对我来说,很明显应该可以删除引号。我的意思是string x;
无非是没有引号的"string x;"
。问题是:这是不可能的。我不认为这有技术原因,人们只能推测为什么没有方法可以做到这一点。
然而,我设法说服自己记住,基本上预处理器所做的只是文本替换,因此,当在预处理器的级别上,你为什么要"去文本化"某些东西,无论如何一切都只是文本。反其道而行之。当我将上面的例子更改为这个时:
#define FOO(x) x
#define STR(x) STRSTR(x)
#define STRSTR(x) #x
#define STR_X string x;
auto f = STR(STR_X)
FOO(STR_X)
那么就没有必要去串化了。如果你发现自己想要通过编译前未知的宏来取消字符串化字符串,那么你无论如何;)都走错了路。
相关文章:
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 有没有办法删除 constexpr
- 有没有一种预处理器的方法可以从调试符号中删除代码段
- 有没有办法删除传递给函数"foo(新对象())"的对象?
- 有没有办法防止从 gnu 链接器垃圾收集中删除添加的 .o 文件部分
- 有没有一种有效的方法来删除已分配但空的特征行而不重新分配
- 有没有一种方法可以全局填充新分配/删除分配
- 有没有办法将擦除-删除成语与其他循环条件一起使用
- 有没有更好的方法来删除对存储在 vector 中的元素的原始指针引用
- 有没有一种方便的方法可以从属性树中删除节点,同时保留其子节点
- 在堆中创建数组时崩溃,并在有/没有shared_ptr的情况下将其删除
- 有没有办法删除 C 宏中的引号
- 有没有办法从这个sql语句和逻辑中删除select count(*)
- 有没有办法从插槽中删除特定信号
- 有没有一种方法可以在不删除内容的情况下从C++映射中删除键
- 在visual studio 6.0中有没有删除图标的功能?
- 有没有一种方法可以从Xcode调试器的调用堆栈中删除内联函数