1

このように定義された Inno Setuo Preprocessor 配列があります

#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「グローバル」変数として使用するのは気分が悪く、 a を単純に使用するのは#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翻訳の要素ごとに 1 行のコンテンツが生成されると思っていました。

4

1 に答える 1

0

この場合に機能するのはA#subだけです。行は現在、以前に定義された#subまたは 経由#emitでのみ翻訳に出力できます。後者はステートメントであり、式コンテキストから呼び出すことはできません。

#define private iサブルーチンを定義する前と#undef ifor ループの後に使用することで、「不快なグローバル変数」の感覚を少し軽減できることに注意してください。

ISPP を強化するための問題が提出されました。必要に応じて、そこに声を追加してみてください。

また、まさにこの種のことを行うスクリプトをすでに持っています(dファイルをCurStepChanged介してフックします)。#includeまだ公開の準備が整っていませんが、翌日か 2 日以内にクリーンアップしてオンラインに投稿する予定でした。ですから、もう少し持ちこたえることができれば、それを見たり使ったりすることができます。(回答が投稿されたら、リンクを使用して回答を編集します。)

于 2013-02-07T20:00:17.717 に答える