[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
m4
의 다른 버전들과의 호환성 이장에서는 m4
의 다른 버전들과의 차이점을 설명한다. 그 중에서도
UNIX 의 System V, Release 3과 주로 비교하겠다.
BSD m4
와도 다소간의 차이점이 있다. 이것은 여기에서 설명하지
않는다.
15.1 GNU m4 에서 확장된 점 | ||
15.2 GNU m4 에는 없는 System V 장치들 | ||
15.3 다른 비호환성 |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
m4
에서 확장된 점 m4
의 1.4 버전은 System V 에서는 없는 몇 개의 설비들을 가지고
있다. 이러 한 여분의 설비들은 명령행에서 `-G' 옵션을 사용함으로서
다른 옵션들과 덮어 쓰여지지 않는 한 제공받을 수 있다.
$
n은 System V 에서는 한자리수의 십진수만
허용하나 GNU m4
는 여러자리 십진수가 될 수 있다. GNU m4
에서는 인자의 개수가 무제한이 라는 이야기가 되며 9개로만 국한되지
않는다는 이야기이다 (see section 매크로와 인자).
include
와 sinclude
는 현재 디렉토리에서
발견되지 않는다 면 사용자가 정해준 검색 경로에서 찾게 되어 있다.
검색경로는 `-I' 옵션을 사용 하거나 `M4PATH' 환경변수를 사용하여
정할 수 있다 (see section 삽입할 파일 검색하기).
undivert
의 인자는 숫자가 아닌 것이 될 수도 있다. 파일의 명칭이
인자로 주어진다면 파일의 내용은 출력으로 확장되지 않고 넘겨진다
(see section 출력을 원래대로 되돌려 놓기 (Undivering output)).
format
을 사용하여 할 수 있다. 이것은
C 라이브 러리 함수 printf
이후에 모델화 되었다 (see section 형식화된 출력).
regexp
와 patsubst
에 의해서 검색과 텍스트 대치가
정규표현식으로 지원을 한다 (see section 정규표현식 검색하기 그리고 see section 정규표현식으로 텍스트를 대치하기).
esyscmd
를 사용하여 m4
에서 확장할 수
있다. (see section 명령의 출력으로 부터 읽기).
builtin
을 사용하여 어떠한 내장매크로든지 간접적으로 접근할 수
있다 (see section 간접적으로 내장 매크로 호출하기).
indir
을 사용하여 간접적으로 호출할 수 있다.
(see section 간접적인 매크로 호출.)
__file__
과
__line__
을 사용하여 접근할 수 있다. (see section Printing error messages.)
dumpdef
를 사용했을 때의 출력과 매크로 추적은 debugmode
에서
옵션을 사용하여 제어할 수 있다. (see section 디버깅 출력을 제어하기.)
debugfile
을 사용하여 제어할 수 있다.
(see section 디버깅 출력을 저장하기.)
위의 표현에서 추가하자면, GNU m4
도구는 다음의 명령행 라인 옵션을
가지고 있다: `-F', `-G', `-I', `-L', `-R',
`-V', `-W', `-d', `-l', `-o', `-t'.
(옵션에 대해서 자세히 알려면 see section m4
를 부르기.)
또한 GNU m4
의 디버깅, 추적 장치는 대부분의 다른 m4
버전들보다 좀 더 폭넓어진다.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
m4
에는 없는 System V 장치들 System V의 m4
버전은 아직 GNU m4
에 없는 몇 개의 설비를
가지고 있다.
m4
는 defn
에서 다중 인자를 지원한다. GNU m4 에는
아직 이 기능이 없다. 내 생각에는 이것은 별다르게 쓸모 없을 것이다.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
m4
도구들 사이에 몇 개의 비호환적인 부분이 있다. System V
m4
버전과 비 교해서 살펴보자.
m4
는 System V m4
와는 다르게, 텍스트를 전환할 때 sync
라인을 다르게 채운다. GNU m4
는 텍스트가 전환될 때 sync 라인들을
출력하고, System V m4
는 텍스트가 전환될 때 거꾸로 가져간다.
이 문제는 어떤 라인이나 파일이름을 이미 존재하는 텍스트에 가져다
붙이거나 전환할 때 발생한다. System V m4
는 전환된 모든 텍스트를
undivert
호출을 포함하는 소스파일에 의해 생긴 걸로 간주한다.
반면에 GNU m4
는 전환된 텍스트를 전환될 때 생긴 것으로 간주한다.
나는 sync 라인 옵션이 m4
가 컴파일러에의 최우선 처리기로
사용되기를 희망 한다. 만일 전환된 라인이 컴파일러 에러를 야기한다면 그
에러메시지는 아마도 거의 대부분 그것이 끼워넣어진 곳이 아닌 전환이
만들어진 곳을 참조할 것이기 때문이다.
m4
는 자동적인 참조 정의가 일치된 곳에서 덧붙이지 않는다.
define(`x', `x') define(`x', `x ') |
이것은 `x'가 `x'를 리턴함으로 정의하는 것인데 따지고 보면 틀린
점은 없다. 하지만 잘못된 부분이 있다면 그것은 인용되지 않은(unquoted)
`x'로 확장된 다는 것이다. m4
에서 어떤 것은 문자열을 쥐기
위해서 매크로를 사용할 수 있는 데, 우리는 변수를 위해서 다른 프로그래밍
언어에서와 같이 이것을 다 음과 같이 체크도 한다.
ifelse(defn(`holder'), `value', …) |
이 경우에서와 같이 자신의 이름으로 정의된 매크로를 금지하는 것은 쓸데없는 제한이다.
m4
에서 `-G' 옵션을 주지 않는 다면 매크로 __gnu__
를 빈 문자열로 확장할 것이다.
UNIX 시스템에서, GNU m4
에 `-G' 옵션을 주지 않는 다면 이것은
매크로 __unix__
를 정의할 것이고, 다른 경우는 매크로 unix
를
정의할 것이다. 둘다 빈 문자열로 확장된다.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Autobuild on March, 29 2007 using texi2html 1.76.