2010-01-04 2 views
3

C 내 빌드 시스템의 전처리기를 사용하여 동일한 소스 파일에서 "readme"일반 텍스트 파일과 웹 페이지를 생성합니다.C 전 처리기 : 인수에서 따옴표 제거

실제 정의는 data.h에서 : URL에 // 인용해야하며, 그렇지 않으면이 주석의 시작으로 간주됩니다

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

주 건설은이 같은 것입니다. 인수에 ,을 사용하면 비슷한 문제가 발생합니다. 따옴표가 필요하거나 쉼표가 인수 구분 기호로 취급됩니다. 이 헤더를 사용

, 파일 readme.txt.ppC 프리 프로세서를 통해 실행된다

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

은 물론, 전 처리기 출력은 다음과 같습니다

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

따옴표 출력에 나타납니다. 출력 줄이 코드를 얻을 수있는 방법, 또는 해결 방법 있나요 :

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

내가 처리기가이 작업을위한 이상적인 도구가 아닙니다 것을 알고 비주얼 C++ 2008을 사용하고는, 다른 내장 된 VC++ 기능을 사용하는 제안도 환영합니다. (XML을 XSLT로 시도했지만, 하나의 XML 파일을 다른 XML 파일에 포함시키는 것은 불가능합니다.)

답변

2

XSLT와 관련하여 여러 소스 문서에서 읽을 수있는 기능을 살펴보십시오.

WEBSITE의 값에서 따옴표를 제거 할 방법이 없다고 생각합니다. 매크로의 정의에 있기 때문입니다. C 전처리 기 대신 m4 매크로 프로세서를 사용하는 것이 좋습니다.

+0

'document()'는 생명의 은인입니다! 이제는 XSLT로 되 돌리십시오. :) – Thomas

0

가능한 경우 C++ 스타일 주석을 비활성화하십시오. VS에서 작동하는 방법을 모르겠어요,하지만 GCC 컴파일러를 사용하여 나는 C++ 스타일의 주석을 해제하는 GCC 따라서

#define WEBSITE http://example.com 

가능하게에 -std=c89 플래그를 전달할 수 있습니다.

+1

쉼표 때문에'#define SOMETEXT Hello, world! '가 아닙니다. – Thomas

2

아마

... 후반 토마스를 들어,이, 그러나, 여전히 요즘 나 같은이 질문을 통해 비틀 거리는 사람에게 유용 할 수있는이 시도 :

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

그래서 라인 주석이 없어, 전처리 기는 DUMMY를 아무것도 해석하지 않습니다.