开发者

C preprocessor: removing quotes from an argument

I'm abusing the C preprocessor for my build system to produce a "readme" plain-text file and a web page from the same source file. The construction is something like this:

The actual definitions are in data.h:

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

Note that the // in the URL must be quoted, or else it will be treated as the start of a comment. A similar problem occurs when using a , in the argument; the quotes are necessary, or else the comma would be treated as an argument separator.

Using this header, a file readme.txt.pp is run through the C preprocessor:

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

Of course, the preprocessor output is:

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

The quotes appear in the output. Is there any way, or workaround, to get this code to give the output:

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

I'm using Visual C++ 2008. I know that the preprocessor is not the ideal tool for this job; suggestions that use other built-in VC++ features are also welc开发者_JS百科ome. (I tried XML with XSLT, but it is impossible to include one XML file into another, which was a show-stopper.)


Regarding XSLT, have a look at the document() function to read from multiple source documents.

I don't think there's any way to remove the quotes from the value of WEBSITE, since they are there in the definition of the macro. You might consider using the m4 macro processor instead of the C preprocessor.


Probably being late for Thomas, this might, however, still be useful for anyone lately stumbling over this question like me...

Try this:

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

So the line comment disappears, and the preprocessor resolves DUMMY to nothing.


Try disabling the C++ style comments if possible. I don't know how that works in VS, but using a GCC compiler I can pass the -std=c89 flag to gcc to disable C++ style comments and hence making

#define WEBSITE http://example.com

possible.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜