본문 바로가기

3.구현/C or C++

전처리(preprocess) 중간 결과 확인하기

전처리(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