1

我有一个这样定义的 Inno Setuo 预处理器数组

#dim MYARRAY[3]
#define MYARRAY[0] 'foo'
#define MYARRAY[1] 'bar'
#define MYARRAY[1] 'baz'

不,我想遍历该数组并将其内容放入我的翻译中,例如(非工作):

#define i 0
#define NUMBERELEMENTS 3

#for {i = 0; i < NUMBERELEMENTS; i++} {#MYARRAY[i]}

不过,我发现以下方法可行,但这是唯一可行的方法吗?使用i作为“全局”变量感觉和简单使用#sub感觉是错误的。

#sub mysub
    {#MYARRAY[i]}
#endsub
#for {i = 0; i < NUMBERELEMENTS; i++} mysub

编辑:

令我困惑的是,以下内容不会在翻译中产生任何内容:

#define GetElement() MYARRAY[i]
#for {i = 0; i < NUMBERELEMENTS; i++} GetElement(i)

我希望它会MYARRAY在翻译中的每个元素生成一行内容。

4

1 回答 1

0

A#sub是在这种情况下唯一有效的方法。行目前只能通过先前定义的#sub或 via输出到翻译#emit,后者是语句,不能从表达式上下文中调用。

请注意,您可以通过#define private i在定义 sub 之前和#undef ifor 循环之后使用来减轻“讨厌的全局变量”的感觉。

已提交问题以增强 ISPP;如果你愿意,你可以尝试在那里添加你的声音。

另外,我已经有一个脚本可以做这种事情(CurStepChanged通过#included 文件挂钩);它还没有完全准备好供公众使用,但我计划在接下来的一两天内把它清理干净并发布到网上。因此,如果您可以坚持一段时间,那么您可以查看或使用它。(一旦发布,我将使用链接编辑我的答案。)

于 2013-02-07T20:00:17.717 回答