전역(비휘발성) 카운터의 m4 매크로 구현

전역(비휘발성) 카운터의 m4 매크로 구현

첫 번째 호출에서는 1로, 두 번째 호출에서는 2로 확장되는 m4 매크로(매개변수 없이)를 정의할 수 있습니까? 즉, 호출된 횟수를 저장할 수 있는 내부 메모리가 있어야 합니다. 이것이 가능합니까?

답변1

counter두 개의 매크로, 즉 현재 값을 저장하는 매크로와 count해당 값으로 확장하고 "카운터"를 재정의하는 매크로를 사용하여 이 작업을 수행할 수 있습니다 . 예를 들어 다음과 같이 보일 수 있습니다.

define(`counter',`0')dnl
define(`count',`define(`counter',eval(counter+1))counter')dnl

count이 매크로를 사용하면 먼저 counter다음 값을 저장하도록 재정의된 다음(현재 값을 1씩 증가) 해당 값을 사용합니다.

단일 매크로를 사용하여 이 작업을 수행하는 방법을 잘 모르겠습니다. 따라서 이것이 귀하의 질문에서 중요한 측면이라면 이는 답변이 아닙니다.

답변2

나는 GNU 메일링 리스트에 비슷한 질문을 올렸습니다 m4-discuss. Doug McIlroy는 다음 코드에 응답하고 공유했습니다.

define(bump,`define(`$1',incr($1))')dnl
define(counter,0)dnl
counter
bump(`counter')counter
bump(`counter')counter

관련 정보