代码之家  ›  专栏  ›  技术社区  ›  Thomas

C预处理器:从参数中删除引号

  •  3
  • Thomas  · 技术社区  · 15 年前

    我在滥用 C 预处理器,用于生成“自述”纯文本文件和来自同一源文件的网页。结构是这样的:

    实际定义在 data.h :

    #define WEBSITE "http://example.com"
    

    请注意 // 在URL中必须引用,否则它将被视为注释的开头。当使用 , 在参数中,引号是必需的,否则逗号将被视为参数分隔符。

    使用这个头文件 readme.txt.pp 是通过 C 预处理器:

    #include "data.h"
    Visit the website at WEBSITE!
    

    当然,预处理器输出是:

    Visit the website at "http://example.com"!
    

    引号出现在输出中。是否有任何方法或解决方法来获取此代码以提供输出:

    Visit the website at http://example.com!
    

    我使用Visual C++ 2008。我知道预处理器不是这项工作的理想工具;也欢迎使用其他内置VC++功能的建议。(我用XSLT尝试了XML,但不可能将一个XML文件包含到另一个XML文件中,这是一个显示障碍。)

    3 回复  |  直到 8 年前
        1
  •  2
  •   Greg Hewgill    15 年前

    关于XSLT,请查看 document() 函数从多个源文档中读取。

    我认为没有任何方法可以从 WEBSITE ,因为它们存在于宏的定义中。您可以考虑使用 m4 宏处理器而不是C预处理器。

        2
  •  2
  •   Aconcagua    12 年前

    也许对托马斯来说已经晚了,但这对像我这样最近在这个问题上犹豫不决的人来说仍然有用……

    试试这个:

    #define DUMMY  
    #define WEBSITE http:/DUMMY/example.com  
    

    因此行注释消失,预处理器将dummy解析为Nothing。

        3
  •  0
  •   codaddict    15 年前

    如果可能的话,尝试禁用C++风格的注释。我不知道它在vs中是如何工作的,但是使用gcc编译器我可以传递 -std=c89 标志到GCC禁用C++风格注释,并因此做出

    #define WEBSITE http://example.com
    

    可能的。