我试图使用C预处理器进行一些文本修改。然而,它似乎在积极地试图阻挠我。
出于测试目的,我有Test.xml.pre
:
<document>
<meta>This is a test.</meta>
SETTINGS
<output format="FORMAT" mode="MODE"/>
</document>
然后我有Setup.cpp
:
#define FORMAT fmt
#define MODE XL
#define SETTINGS <settings><!-- None yet --></settings>
我希望我能以某种方式运行预处理器并最终得到格式良好的输出。我看到this question,这使得使用预处理器看起来很容易。但是当我这样做时:
cpp -E -include Setup.cpp Test.xml.pre -o Test.xml
然后我明白了:
# 1 "Test.xml.pre"
# 1 "<command-line>"
# 1 "./Setup.cpp" 1
# 1 "<command-line>" 2
# 1 "Test.xml.pre"
<document>
<meta>This is a test.</meta>
<settings><!-- None yet --></settings>
<output format="FORMAT" mode="MODE"/>
</document>
尽我所能,我无法在顶部找到 rid 的哈希行。我也不确定为什么FORMAT
和MODE
没有扩展。 (SETTINGS
似乎扩展得很好。)
我做错了什么?
PS。万一重要,
cpp (SUSE Linux) 4.8.1 20130909 [gcc-4_8-branch revision 202388]
答案 0 :(得分:1)
要删除行定义,请使用-P
命令行参数。
字符串文字中的标识符未展开,因此您无法以您的方式使用FORMAT和MODE。但是,这有效:
<document>
<meta>This is a test.</meta>
SETTINGS
<output format=FORMAT mode=MODE/>
</document>
与
#define FORMAT "fmt"
#define MODE "XL"
#define SETTINGS <settings><!-- None yet --></settings>
获取
$ cpp -P -E -include Setup.cpp Test.xml.pre -o Test.xml
$ cat Test.xml
<document>
<meta>This is a test.</meta>
<settings><!-- None yet --></settings>
<output format="fmt" mode="XL"/>
</document>