ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 23:59

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 
作成者 メッセージ
 記事の件名: ポインタ値の比較
投稿記事Posted: 2005年11月21日(月) 20:09 
オフライン

登録日時: 2005年5月31日(火) 20:14
記事: 203
お住まい: 兵庫県
コード:
#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 とすれば正常動作します

_________________
[hira]
http://hira.hopto.org/


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年11月21日(月) 23:11 
オフライン

登録日時: 2005年8月23日(火) 00:15
記事: 161
お住まい: 沖縄県
hiraさんのコードはあっていると思います。

今回問題となっているのでin<limitの部分です。

本来 < , <= は true になり > , >= は false になるはずですが、

AB4.11.03では、< , <= は false で > , >= は true になっています。

= , <> は正常に判定できるようです。

山本様調査お願いします。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年11月21日(月) 23:33 
オフライン

登録日時: 2005年8月23日(火) 00:15
記事: 161
お住まい: 沖縄県
先ほどの調査結果が間違っていたかも知れません。

どうもActiveBasicの比較処理は
右辺と左辺がBytePtrの場合は文字列として処理を行うようです。

そうすると、この件は仕様上はあっていると思われますので
キャストして使う必要があります。

みなさんは右辺と左辺がBytePtrの場合は文字列となる
仕様に関してどう思います?


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年11月22日(火) 07:45 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
> 右辺と左辺がBytePtrの場合は文字列となる仕様

+演算子の場合は両辺ともBytePtrでは文字列とはならないようなのでそれと揃えてほしいです。
どちらかと言うとBytePtr同士の比較演算をポインタ変換にするほうが私は良いと思います。
http://www.discoversoft.net/forum/viewtopic.php?t=459


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年11月23日(水) 02:56 
オフライン
Site Admin

登録日時: 2005年5月30日(月) 15:08
記事: 535
引用:
+演算子の場合は両辺ともBytePtrでは文字列とはならないようなのでそれと揃えてほしいです。
どちらかと言うとBytePtr同士の比較演算をポインタ変換にするほうが私は良いと思います。
了解しました。ニュアンス的に、ポインタ値同士の演算という捉え方が正しいのかもしれません。

次回のバージョンアップで「左辺、右辺のいずれか、又は両方がString型の場合のみ、文字列比較演算として扱う」という仕様に修正する方向で考えます。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[11人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean