我想使用C预处理器复制一些代码片段。我知道如何处理多行宏,但是我面临两个困难:
我找不到在宏中嵌入评论的方法,
生成的输出没有换行符。
例如这是我想做的事
#define Snippet \
// This is my snippet \
a= b + c;
(某种)。
所需的生成输出:
// This is my snippet
a= b + c;
您是否有针对1.和2.的解决方案?预先感谢。
答案 0 :(得分:1)
您所显示的宏的问题是由于编译过程的工作原理。
如果您查看例如this C translation phase reference,您会看到在第2阶段发生换行,然后在第3阶段用空格替换注释,最后在第4阶段进行预处理。
也就是说,在第二阶段之后,您拥有的是
#define Snippet // This is my snippet a= b+c;
然后在第3阶段替换注释后,宏定义变为空。
注释的解决方案是使用/*
和*/
使用块注释。
对于行连续问题,没有解决方案,因为这是必须的。
答案 1 :(得分:0)
对于那些感兴趣的人,我已经解决了以下问题:
以下宏允许嵌入C ++样式的注释:
#define Comment(Text) #/#/ Text
我要在每行末尾添加一个保留字符。宏扩展后,我将其转换为带有查找/替换宏的换行符。
#define Snippet \
Comment(This is my snippet)@\
a= b + c;
展开为
// This is my snippet@a= b + c;
以及替换后
// This is my snippet
a= b + c;
尽管当前的解决方案已经可以管理,但我仍在寻找一种将符号扩展为换行符的方法。