C预处理器的输出不符合预期

时间:2014-10-01 09:51:26

标签: linux c-preprocessor

我试图使用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 的哈希行。我也不确定为什么FORMATMODE没有扩展。 (SETTINGS似乎扩展得很好。)

我做错了什么?

PS。万一重要,

cpp (SUSE Linux) 4.8.1 20130909 [gcc-4_8-branch revision 202388]

1 个答案:

答案 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>