C preprocessor 使用C预处理器进行多行代码复制

C preprocessor 使用C预处理器进行多行代码复制,c-preprocessor,preprocessor-directive,C Preprocessor,Preprocessor Directive,我想使用C预处理器复制一些代码片段。我知道如何处理多行宏,但我面临两个困难: 我没有找到在宏中嵌入注释的方法 生成的输出没有换行符 以下是我希望能够做到的 #define Snippet \ // This is my snippet \ a= b + c; 有点 期望生成的输出: // This is my snippet a= b + c; 你有1的解决方案吗。和2?提前感谢。您所展示的宏的问题在于编译过程的工作方式 如果你看一看,例如,你会看到行继续发生在第2阶段,然后注释在第3阶段被

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

我没有找到在宏中嵌入注释的方法

生成的输出没有换行符

以下是我希望能够做到的

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

期望生成的输出:

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

你有1的解决方案吗。和2?提前感谢。

您所展示的宏的问题在于编译过程的工作方式

如果你看一看,例如,你会看到行继续发生在第2阶段,然后注释在第3阶段被空格替换,最后预处理发生在第4阶段

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

#define Snippet // This is my snippet a= b+c;
然后在第3阶段中替换注释后,宏定义变为空

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


线延拓问题没有解决方案,因为它必须是这样工作的。

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

以下宏允许嵌入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;

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

您显示的生成输出是实际输出还是预期输出?请尝试创建一个显示,以及实际和预期生成的输出。@Someprogrammerdude:预期。宏定义无法正常工作。块注释不起作用,它们被预处理器吞没,因为我激活了“保留注释”选项。@YvesDaoust为什么要在展开的宏中保留注释?无论如何,注释不会出现在编译的可执行文件中,根据规范,必须在第3阶段删除注释。您试图解决的真正问题是什么?我希望通过汇编代码段生成可读的源代码,编译将在以后进行。//C不合法,因为stringify运算符仅适用于宏参数。如果您想要字符串化,您可以将其写成//但这似乎与您的输出不一致。也许您打算尝试使用//连接两个斜杠?但这不是合法的C,因为这不是一个令牌。@ RICI:对我来说重要的是它与我的编译器一起工作,它确实是,我不知道为什么。在这种情况下,考虑将编译器的标签添加到这个问题上,这样我们就不会认为你在寻找一个通用的解决方案。