代码之家  ›  专栏  ›  技术社区  ›  Yves Daoust

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

  •  0
  • Yves Daoust  · 技术社区  · 5 年前

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

    1. 我没有办法在宏中嵌入注释,

    E、 g.这是我想做的

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

    (差不多)。

    期望生成的输出:

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

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

    2 回复  |  直到 5 年前
        1
  •  1
  •   Some programmer dude    5 年前

    您所展示的宏的问题在于编译过程是如何工作的。

    this C translation phase reference 您将看到在第2阶段中发生了行继续,然后在第3阶段中用空格替换了注释,最后在第4阶段进行了预处理。

    也就是说,在第二阶段之后

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

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

    /* */

    行继续问题没有解决方案,因为它必须这样工作。

        2
  •  0
  •   Yves Daoust    5 年前

    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;