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( に変換します。これを行うにはもっと良い方法があると思いますので、これは一時的な解決策にすぎません。