2013-02-04 56 views
4

我試圖取代如果有如果(使用GNU M4 1.4.14和我收到ERROR: end of file in argument list 嘗試時:如何在m4中定義一個與其擴展名相同的宏?

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

if foo then bar() fi 

我試圖逃避括號,但造成M4的短暫時間後出錯我發現沒有任何關於這個問題的信息

在將宏的名稱更改爲'IF'或'if'以外的值時,它會按預期工作,這會導致我相信它會反覆評估自己。

如果是這樣,我該如何定義一次只評估一次的宏?否則,我該如何解決這個問題?

編輯我找到了解決這個問題的方式被處理兩次,第一次轉換,如果到_IF且下一_IF轉換爲IF(我假設有一個更好的方式來做到這一點,所以這只是一個暫時的的解決辦法,在我眼裏

回答

3

您需要防止m4從嘗試重新擴大的替換用雙引號這樣做:

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

if foo then bar() fi 
相關問題