2014-10-01 2 views
0

일부 텍스트 채우기에 C 전처리기를 사용하려고합니다. 그러나 나를 적극적으로 방해하려는 것 같습니다. 테스트 목적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> 

보십시오, 나는 상단에있는 해시 라인의 제거를 얻을 수 없습니다. 나는 또한 왜 FORMATMODE 확장하지 않는지 잘 모르겠다. (SETTINGS은 잘 확장되는 것처럼 보입니다.)

내가 뭘 잘못하고 있니?

추신. 문제가되는 경우

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

답변

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> 
+0

최고 받으실 수 있습니다! 감사. 다른 정의를 확장 할 수있는 방법이 있습니까? – MathematicalOrchid

+0

죄송합니다, 두 번째 부분에 대한 답변을 잊어 버렸습니다. :) 추가되었습니다. – jlahd

관련 문제