4.1. 외부 필터들

여러분이 즐겨 사용하는 어셈블러에서 지원하는 매크로가 무엇이든, 여러분이 주로 사용하는 언어가 무엇이든지간에 (심지의 C 일 경우에도) 그 언어가 여러분이 생각하기에 충분히 expressive(모든 것을 표현할 수 있는) 하지 않다면, 여러분은 여러분의 소스 파일을 외부의 필터를 통과해서 재생성(?)되게 할 수 있으며, Makefile 에서 다음에 보여지는 것과 같은 간단한 규칙만 추가 함으로서 그렇게 할 수 있다.

%.s:    %.S other_dependencies
        $(FILTER) $(FILTER_OPTIONS) < $< > $@

4.1.1. CPP

CPP 는 실은 그리 표현적이지 못하다(is truly not very expressive), 하지만, 간단한 일을 하기 위해서는 CPP 로도 충분하다. CPP 는 표준이며, GCC 에 의해서 투명하게 호출되어진다.

CPP 의 한계에 대한 예를 들자면, 여러분은 여러분의 객체가 선언되어서, 사용할 때, 그 객체가 유효한 부분의 마지막에 자동으로 소멸자(destructor) 가 호출되게 하는 기능을 구현할 수는 없다.

As an example of its limitations, you can't declare objects so that destructors are automatically called at the end of the declaring block; you don't have diversions or scoping, etc.

CPP 는 대부분의 C 컴파일러 패키지들에 포함되어 있다. 그러나, 특별히 뛰어나거나 하지도 않다.

4.1.2. M4

M4 는 여러분에게 매우 훌륭하고, 강력한 매크로 프로세싱 도구가 되어 줄 것이다. 게다가 Turing 과 같은 언어를 지원하고, 재귀, 정규 표현식 등도 지원한다. 여러분은 CPP 로 하지 못했던 모든 것을 M4 를 가지고 할 수 있게 될 것이다.

M4 gives you the full power of macroprocessing, with a Turing equivalent language, recursion, regular expressions, etc. You can do with it everything that CPP cannot.

m4 를 사용한 매크로 프로그래밍의 예제를 구하기를 원한다면, macro4th (this4th - ftp://ftp.forth.org/pub/Forth/Compilers/native/unix/this4th.tar.gz) the Tunes 0.0.0.25 sources(ftp://ftp.tunes.org/pub/tunes/obsolete/dist/tunes.0.0.0/tunes.0.0.0.25.src.zip) 을 참조하기 바란다.

그러나, However, its disfunctional quoting and unquoting semantics force you to use explicit continuation-passing tail-recursive macro style if you want to do advanced macro programming (which is remindful of TeX -- BTW, has anyone tried to use TeX as a macroprocessor for anything else than typesetting ?). This is NOT worse than CPP that does not allow quoting and recursion anyway.

구해야 할 M4 의 버젼은 GNU m4 1.4 혹은 그 이상의 버젼이다. 가장 많은 기능과 가장 적은 버그 혹은 제한을 가지고 있는 버젼이기 때문이다. m4 는 셜계될 때, 간편한 사용을 목적으로 설계되고, 빠른 속도를 목표로 해서 설계되지 않았기 때문에, 무엇을 하든지 좀.. 느리다. 그러나, 어셈블리 프로그램을 만들때에는 별 문제가 되지 않는다. 어셈블리로 몇백만 라인이나 되는 양을 코딩할 것인가? 그렇지 않다.

4.1.3. 여러분이 만든 필터를 이용한 매크로 프로세싱

여러분은 perl 이나 awk, sed 등을 가지고도 여러분 자신의 간단한 매크로 확장 필터를 만들 수 있다. 오히려 간단한 것은 이러한 툴을 가지고 만드는 것이 더 나을지도 모른다. 그러나. 매크로 프로세싱이란 말은 "the hard way(좀 더 힘든 방법?)" 라는 뉘앙스를 풍긴다. You can write your own simple macro-expansion filter with the usual tools: perl, awk, sed, etc. It can be made rather quickly, and you control everything. But, of course, power in macroprocessing implies "the hard way".