我想每次使用累加器调用N次宏,即;

%macro foo 1
range 1, 8, {some_partially_applied_macro %1}
%endmacro


相当于

%macro foo 1
some_partially_applied_macro %1, 1
some_partially_applied_macro %1, 2
some_partially_applied_macro %1, 3
...
some_partially_applied_macro %1, 8
%endmacro


我尝试编写以下内容(及其几种变体):

%macro range 3
%assign i %1
%rep %2
%[%3 i]
%assign i i+1
%endrep
%endmacro


我没有成功。

需要注意的重要一点是,第三个参数可能需要部分应用。

最佳答案

弄清楚了。删除%[...]周围的%[%3 i]部分。

它在欺骗我,因为我正在像这样测试它:

range 1, 8, {some_partially_applied_macro %1}


实际上,在%1之后必须有一个逗号,否则NASM无法正确扩展它(它没有将其视为正确的逗号分隔宏)。

10-07 17:37