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

时间:2010-01-04 10:11:44

标签: macros c-preprocessor quotes

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

实际定义位于data.h

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

请注意,必须引用网址中的//,否则会将其视为评论的开头。在参数中使用,时会出现类似的问题;引号是必要的,否则逗号将被视为参数分隔符。

使用此标头,文件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 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

对托马斯来说可能迟到了,但是,对于像我这样最近绊倒这个问题的人来说,这可能仍然有用......

试试这个:

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

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

答案 2 :(得分:0)

如果可能,请尝试禁用C ++样式注释。我不知道在VS中是如何工作的,但是使用GCC编译器我可以将-std=c89标志传递给gcc以禁用C ++样式注释,从而制作

#define WEBSITE http://example.com

可能的。