2016-11-21 53 views
0

我正在使用一些C预处理器宏,这些宏要感谢其他地方的更改,现在显示为((“Foo”))而不是“Foo”。问题是,在代码的其他地方,这是破坏连接。C预处理器,从字符串中去除条状图

E.G.

#include "some_external_FOO_and_FILE_PATH_declarations.h" 
//FOO is (("Foo")) 
const char* filepath = FILE_PATH(FOO "/bar") 
//throws error 

我怎样才能让FOO再次看起来像“Foo”?

回答

0

这结束了对我的工作:

#define UNPAREN(...) #__VA_ARGS__ 
const char *filepath = FILEPATH(UNPAREN(FOO) "bar") 
+0

UPDATE:让我们说: 的#define FOO( “巴”) 那么这将产生类似: “FOO”。这可能不是你想要的。 #define UNPAREN(...)__VA_ARGS__ (注意缺少#)会产生“酒吧”,但有一个窍门。你必须这样称呼它: UNPAREN FOO 而不是 UNPAREN(FOO) 因为parens已经在那里了,明白了吗? 请注意,这不适用于嵌套parens ... – Hatsuma