Macros 如何引用m4宏中的最后一个参数

Macros 如何引用m4宏中的最后一个参数,macros,m4,Macros,M4,如何引用m4宏中给定参数列表中的最后一个参数?我需要提取最后一个参数并在此基础上生成宏展开。这不是特别优雅,但它可以工作: define(`last',`ifelse(`$#',`0',`',`$#',`1',`$1',`last(shift($@))')')dnl last(foo,bar,baz) # more elegant solution: changequote([,]) define([LEN], [$#]) define([LAST], [pushdef([$0], $LEN(

如何引用m4宏中给定参数列表中的最后一个参数?我需要提取最后一个参数并在此基础上生成宏展开。

这不是特别优雅,但它可以工作:

define(`last',`ifelse(`$#',`0',`',`$#',`1',`$1',`last(shift($@))')')dnl
last(foo,bar,baz)
# more elegant solution:
changequote([,])
define([LEN], [$#])
define([LAST], [pushdef([$0], $LEN($@))$0($@)[]popdef([$0])])
define([LAST_BUT_ONE], [pushdef([$0], $decr(LEN($@)))$0($@)[]popdef([$0])])

LAST(foo, bar, baz)

LAST_BUT_ONE(foo, bar, baz)