ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
-
hira
- 記事: 203
- 登録日時: 2005年5月31日(火) 20:14
- お住まい: 兵庫県
#1
投稿記事
by hira »
コード: 全て選択
#N88BASIC
Dim a As String
Dim in As BytePtr,limit As BytePtr
a="1234567890"
in=StrPtr(a)
limit=StrPtr(a)+10
Do
in=in+1
Print in
Loop While in<limit
以上のコードで、Print文が1回しか実行されません。
今までは動作していたのですが、これは元々できない仕様のはずだったのでしょうか?
※Loop While in As Long<limit As Long とすれば正常動作します
-
マティ
- 記事: 161
- 登録日時: 2005年8月23日(火) 00:15
- お住まい: 沖縄県
#2
投稿記事
by マティ »
hiraさんのコードはあっていると思います。
今回問題となっているのでin<limitの部分です。
本来 < , <= は true になり > , >= は false になるはずですが、
AB4.11.03では、< , <= は false で > , >= は true になっています。
= , <> は正常に判定できるようです。
山本様調査お願いします。
-
マティ
- 記事: 161
- 登録日時: 2005年8月23日(火) 00:15
- お住まい: 沖縄県
#3
投稿記事
by マティ »
先ほどの調査結果が間違っていたかも知れません。
どうもActiveBasicの比較処理は
右辺と左辺がBytePtrの場合は文字列として処理を行うようです。
そうすると、この件は仕様上はあっていると思われますので
キャストして使う必要があります。
みなさんは右辺と左辺がBytePtrの場合は文字列となる
仕様に関してどう思います?
-
山本
- Site Admin
- 記事: 535
- 登録日時: 2005年5月30日(月) 15:08
#5
投稿記事
by 山本 »
イグトランス さんが書きました:+演算子の場合は両辺ともBytePtrでは文字列とはならないようなのでそれと揃えてほしいです。
どちらかと言うとBytePtr同士の比較演算をポインタ変換にするほうが私は良いと思います。
了解しました。ニュアンス的に、ポインタ値同士の演算という捉え方が正しいのかもしれません。
次回のバージョンアップで「左辺、右辺のいずれか、又は両方がString型の場合のみ、文字列比較演算として扱う」という仕様に修正する方向で考えます。