使用C预处理程序进行多行代码复制

时间:2019-02-06 08:26:32

标签: c-preprocessor preprocessor-directive

我想使用C预处理器复制一些代码片段。我知道如何处理多行宏,但是我面临两个困难:

  1. 我找不到在宏中嵌入评论的方法,

  2. 生成的输出没有换行符。

例如这是我想做的事

#define Snippet \
// This is my snippet \
a= b + c;

(某种)。

所需的生成输出:

// This is my snippet
a= b + c;

您是否有针对1.和2.的解决方案?预先感谢。

2 个答案:

答案 0 :(得分:1)

您所显示的宏的问题是由于编译过程的工作原理。

如果您查看例如this C translation phase reference,您会看到在第2阶段发生换行,然后在第3阶段用空格替换注释,最后在第4阶段进行预处理。

也就是说,在第二阶段之后,您拥有的是

#define Snippet // This is my snippet a= b+c;

然后在第3阶段替换注释后,宏定义变为空。

注释的解决方案是使用/**/使用块注释。

对于行连续问题,没有解决方案,因为这是必须的。

答案 1 :(得分:0)

对于那些感兴趣的人,我已经解决了以下问题:

  1. 以下宏允许嵌入C ++样式的注释:

    #define Comment(Text) #/#/ Text
    
  2. 我要在每行末尾添加一个保留字符。宏扩展后,我将其转换为带有查找/替换宏的换行符。

    #define Snippet \
    Comment(This is my snippet)@\
    a= b + c;
    

展开为

// This is my snippet@a= b + c;

以及替换后

// This is my snippet
a= b + c;

尽管当前的解决方案已经可以管理,但我仍在寻找一种将符号扩展为换行符的方法。