[ << ] | [ < ] | [ 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 on February 24, 2015 using texi2html 5.0.