여러분이 즐겨 사용하는 어셈블러에서 지원하는 매크로가 무엇이든, 여러분이 주로 사용하는 언어가 무엇이든지간에 (심지의 C 일 경우에도) 그 언어가 여러분이 생각하기에 충분히 expressive(모든 것을 표현할 수 있는) 하지 않다면, 여러분은 여러분의 소스 파일을 외부의 필터를 통과해서 재생성(?)되게 할 수 있으며, Makefile 에서 다음에 보여지는 것과 같은 간단한 규칙만 추가 함으로서 그렇게 할 수 있다.
%.s: %.S other_dependencies $(FILTER) $(FILTER_OPTIONS) < $< > $@ |
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 컴파일러 패키지들에 포함되어 있다. 그러나, 특별히 뛰어나거나 하지도 않다.
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 는 셜계될 때, 간편한 사용을 목적으로 설계되고, 빠른 속도를 목표로 해서 설계되지 않았기 때문에, 무엇을 하든지 좀.. 느리다. 그러나, 어셈블리 프로그램을 만들때에는 별 문제가 되지 않는다. 어셈블리로 몇백만 라인이나 되는 양을 코딩할 것인가? 그렇지 않다.
여러분은 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".