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

5
我将滥用C预处理器来构建我的构建系统,以从同一源文件生成“readme”纯文本文件和网页。 构建过程类似于以下内容:
实际定义位于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文件包含到另一个中,这是一个阻碍)

3个回答

2

也许对于Thomas来说已经晚了,但对于像我一样最近遇到这个问题的人仍然很有用...

试试这个方法:

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

所以行注释被删除,预处理器将DUMMY解析为空。

2
关于XSLT,请查看document()函数,以从多个源文档中读取内容。
我认为没有办法从WEBSITE的值中删除引号,因为它们在宏定义中已经存在。您可以考虑使用m4 宏处理器代替C预处理器。

document() 真是个救星!现在回归 XSLT :) - Thomas

0

如果可能的话,请尝试禁用C++风格的注释。我不知道在VS中如何操作,但是使用GCC编译器,我可以通过传递-std=c89标志给gcc来禁用C++风格的注释,从而使其生效。

#define WEBSITE http://example.com

可能的。


1
是的,但不能使用 #define SOMETEXT Hello, world!,因为其中含有逗号。 - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接