2015-06-10 13 views
2

如果我想生成的代碼看起來像這樣:調用的函數表使用重複的塊或宏在GNU組件

CALL FUNC0 
CALL FUNC1 
CALL FUNC2 
CALL FUNC3 
CALL FUNC4 
CALL FUNC5 
... 
CALL FUNC19 

如何使用重複塊生成這樣的代碼,使用類似的東西代碼如下:

.equ SYMBOL, 0 
.rept 20 
    CALL FUNC(SMYBOL) 
    .equ SYMBOL, (SYMBOL+1) 
.endr 

宏也很好。

我想知道如何在C中做到這一點。

回答

2

您可以使用宏做到這一點:

.altmacro 
.macro call_funcs count 
    .if \count 
     call_funcs %(count-1) 
    .endif 
    CALL FUNC\count 
.endm 

call_funcs 20 

.altmacro指令允許使用%通過遞歸作爲宏參數之前評估count - 1。否則,你會得到CALL FUNC20-1-1-1-1這不是你想要的。

據我所知,在C中沒有辦法達到你想要的。爲此我會編寫一個程序來生成你需要的C代碼。

+0

謝謝。我發現另一種方法是使用'.irp',儘管我必須實際編寫每個我想要生成的值,例如:'.irp 0,1,2,...'。這對我正在做的事很好。 – squirem