5

GNU m4 1.4.14 を使用して if( を if( に置き換えようとしていますが、試行時に受信ERROR: end of file in argument list しています:

define(`if', `if(')
define(`then', `){')
define(`fi', `}')

if foo then bar() fi

かっこをエスケープしようとしましたが、メモリが不足していると言ってしばらくするとm4がエラーになりました。マニュアルをスキャンしたところ、この問題に関連するものは何も見つかりませんでした。

マクロの名前を「IF」または「if」以外の名前に変更すると、期待どおりに機能するため、マクロ自体が繰り返し評価されていると思われます。

もしそうなら、一度だけ評価されるマクロをどのように定義できますか? それ以外の場合は、これを修正するために何を調べる必要がありますか?

編集2 回処理することで、この問題を回避する方法を見つけました。1 回目は if を _IF に変換し、次に _IF を if( に変換します。これを行うにはもっと良い方法があると思いますので、これは一時的な解決策にすぎません。

4

1 に答える 1

4

m4置換を再展開しようとするのを防ぐ必要があります。二重引用符で囲みます。

define(`if', ``if('')
define(`then', `){')
define(`fi', `}')

if foo then bar() fi
于 2013-03-01T00:32:03.923 に答える