インクリメント時の左辺配列要素の参照回数
Posted: 2006年4月06日(木) 21:26
質問版で気づき辛い問題を発見された方がおりましたので、私のほうから詳細をご報告させていただきます。
このようなコードを実行すると、Command関数が2回呼び出されてしまう問題について、修正を行います。
n++
通常は上記のようなコードは、
n=n+1
と同等の意味を持ちますが、今回の問題に関しては、
k[Command()]++
と
k[Command()]=k[Command()]+1
は等しいとはいえません。プログラムの表記通り、配列要素の参照が一度しか記述されておりませんので、呼び出し回数も一度で済むように改良を行おうと思います。
コード: 全て選択
Dim i=1 As Byte,k[1] As Byte
k[Command()]++
debug
Function Command() As Byte
Command=i
If i>0 Then i=0
End Function
n++
通常は上記のようなコードは、
n=n+1
と同等の意味を持ちますが、今回の問題に関しては、
k[Command()]++
と
k[Command()]=k[Command()]+1
は等しいとはいえません。プログラムの表記通り、配列要素の参照が一度しか記述されておりませんので、呼び出し回数も一度で済むように改良を行おうと思います。