전처리(preprocess) 중간 결과 확인하기
Writer: http://ospace.tistory.com/(ospace114@empal.com) 2008.09.23
C++에서 define를 이용한 처리가 많다. 이런 define이 매크로서 사용하며 반복적인 작업이나 상수값으로서 사용한다. 그러나 실질적인 define문은 문자열 치환이라는 작업으로 이런 작업을 수행한다. 이를 전처리라고 한다. 이외에 전처리 종류가 더 있으나 이는 다른 곳에서 확인하길 바란다.
간혹 지금 작성한 전처리가 생각대로 생성지 않거나 제대로 작동하고있는지 확인하고 싶을때가 있다. 그 방법을 살펴보자. 사실 C++ 권장 사용법에는 매크로를 사용하지 말라고 한다. 물론 사용해도 된다고 하는 사람들도 있다.
사용을 지양하는 이유는 코드를 읽기 어렵게 하며, 나중에 유지보수가 어려워진다고 한다. 사용하는 사람은 코드를 단순하고 코딩 줄수를 줄일 수 있다는 것이다. 물론 다른 여러가지 이유들도 있지만 검색을 하면 많이 나올 것이다. 대부분 사용하지 않은 추세인듯 하다. 그중에서 일반적인 상수형의 값은 전역상수값으로 선언해서 사용하라는 것이다.
//매크로
#define PI 3.14
// 전역변수
const double PI = 3.14;
그러나, 전처리기가 주는 매력은 떨치기 어렵다. 이는 VC++의 SDK에서도 보면 쉽게 알 수 있다.
이런 선택은 여러분의 몫이다.
주의: 아래 사용하는 방법은 VC++에서 사용한 것으로 그외 컴파일에서 제대로 작동하는 보장은 없다.
사용옵션: /P
전처리 확장하는 옵션은 "/P"이다. 이 옵션을 지정해주면 자동으로 소스코드 파일 이름에 확장자 ".i"인 파일이 생성된다. 그리고 "#line" 지시문이 추가되면, 이는 전처리한 파일에 행번호를 표시한다.
결과는 전처리기가 확장되고 모든 주석이 제거된 형태로 출력된다.
주석을 유지하고 싶다면 "/C" 옵션을 같이 사용한다.
그리고, 화면으로 출력하며 #line을 사용하지 않으려면 "/EP"옵션을 같이 사용하면 된다.
주의 할 것은 "/P" 옵션을 사용하게 되면 전처리 확장만 하며, 실제 컴파일이 되지 않는다.
설정하기
설정하는 방법은 간단하다. VC 프로젝트 설정에서 할 수 있다.
- 영어버전: C/C++ > Preprocessor 에서 Generate Preprocessed File 항목을 Yes로 설정
(주의: 버전에 따라 "Preprocess to a File" 항목을 설정) - 한글버전: C/C++ > 전처리 속성에서 전처리 파일 속성을 Yes로 변경
사용예
아래 그림은 도스창에서 직접 입력하여 사용한 예이다.
추가
참고로 gcc인 경우는 -E 옵션을 사용하면 된다.
gcc -E test.cpp
참고
[1] MSDN - Visual C++ Compiler Options /P (Preprocess to a File)
'3.구현 > C or C++' 카테고리의 다른 글
C로 객체지향 흉내내기1 (0) | 2009.07.23 |
---|---|
Morden Programming의 Functor (0) | 2009.03.08 |
STL에서 문자열 트림 (string trim)하기 (0) | 2008.08.13 |
함수호출 규약 (0) | 2007.06.18 |
Metaprogramming (0) | 2007.02.16 |