Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 welcome. (I tried XML with XSLT, but it is impossible to include one XML file into another, which was a show-stopper.)

like image 646
Thomas Avatar asked Oct 15 '22 11:10

Thomas


1 Answers

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.

like image 145
Greg Hewgill Avatar answered Oct 20 '22 01:10

Greg Hewgill