有没有办法删除C宏中的引号?

syv*_*vex 13 c c++ macros stringify

假设我想取消应该转换"text"为的宏参数的字符串text.

#define UN_STRINGIFY(x) /* some macro magic here */
Run Code Online (Sandbox Code Playgroud)

现在调用此宏""将从其参数中删除

UN_STRINGIFY("text") // results in ----> text
Run Code Online (Sandbox Code Playgroud)

这与宏字符串化相反:

#define STRINGIFY(x) #x
Run Code Online (Sandbox Code Playgroud)

这是可能的,还是我在玩宏观邪恶?

Thi*_*ter 14

这是不可能的.这可能是一件好事:如果你传递一个字符串,你会认为你可以把所有东西都放进去.对它进行非字符串化会突然导致编译器实际关注该字符串的内容.

  • tbh我不买这个论点:"解开它会突然导致编译器实际关心该字符串的内容".如果你有`#define FOO(x)x`那么`x`几乎可以是任何东西,当然comppiler关心`x`是什么.考虑`auto f ="some string"; FOO(一些字符串)`,这里`x`只是一个没有引号的字符串.Afaik compier甚至不知道它处理的代码是否是宏扩展的结果. (4认同)