ab.com コミュニティ

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

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




新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年7月28日(木) 01:17 
オフライン

登録日時: 2005年5月31日(火) 13:31
記事: 205
お住まい: 大阪市
たとえば、ProjectEditorで以下のことをすると、エラーが出ずにコンパイルが通ってしまいます。
コード:
Sub A()
ElseSub
End Sub
存在しないはずの関数でコンパイルをすると
「"ElseSub" 無効な識別子です」と言うエラーを出さずにコンパイルが通ります。
しかし、他のSubからA()と入力、コンパイルすると、上の行でエラーを出します。
って言っても、Subの中に"ElseSub"しかないときしかコンパイルは通り、他のが1つでも入っていると正常にエラーを出します。
(と言うか、何で自分は「ElseSub」なんて思いついたのだろう・・・)

次に、コンパイラの誤認識?ですが、複数行コメントで、以下のような使い方をすると、Callback.wbpでエラー(*1)が発生します。
コード:
/*Sub M()

End Sub

Sub MainWnd_KeyDown(KeyCode As Long, flags As Long)
Dim Key As Long
Key=KeyCode
If Key=&H26 Then '↑キー(KeyUp)
MessageBox(0,"0",0,0)
ElseIf Key=&H28 Then '↓キー(KeyDown)
MessageBox(0,"1",0,0)
ElseIf Key=&H25 Then '←キー(KeyLeft)
MessageBox(0,"2",0,0)
ElseIf Key=&H27 Then '→キー(KeyRight)
MessageBox(0,"3",0,0)
End If
End Sub
*/
(*1「Callback.wbp(80) - "MainWnd_KeyDown" 無効な識別子です」)
それと、自分の所では、
コード:
/*
Sub MainWnd_KeyDown(KeyCode As Long, flags As Long)
Dim Key As Long
Key=KeyCode
If Key=&H26 Then '↑キー(KeyUp)
MessageBox(0,"0",0,0)
ElseIf Key=&H28 Then '↓キー(KeyDown)
MessageBox(0,"1",0,0)
ElseIf Key=&H25 Then '←キー(KeyLeft)
MessageBox(0,"2",0,0)
ElseIf Key=&H27 Then '→キー(KeyRight)
MessageBox(0,"3",0,0)
End If
End Sub
*/
でも同様のエラーが発生しました。

あと、詳細は「スクロールバーでスクロールできるソース行」ぐらいしか分からないのですが、複数行コメント(/*~*/)でたまに色が変化しないときがあります。(/*がエディタ内に表示されていない状態(スクロールをしないと表示しない)でたまに発生します。(そのとき、一番上の行(詳細不明)の2,3文字まではコメント色になっていました))
(↑情報が分かり次第、追記してみたいと思います。)

長くなりましたが、ご確認してみてください。

環境
OS: Windows XP SP2
AB: Version 4.04.00


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月28日(木) 15:40 
オフライン
Site Admin

登録日時: 2005年5月30日(月) 15:08
記事: 535
引用:
たとえば、ProjectEditorで以下のことをすると、エラーが出ずにコンパイルが通ってしまいます。
コード:
Sub A()
ElseSub
End Sub
存在しないはずの関数でコンパイルをすると
「"ElseSub" 無効な識別子です」と言うエラーを出さずにコンパイルが通ります。
しかし、他のSubからA()と入力、コンパイルすると、上の行でエラーを出します。
って言っても、Subの中に"ElseSub"しかないときしかコンパイルは通り、他のが1つでも入っていると正常にエラーを出します。
ActiveBasicコンパイラは、コンパイルが必要な関数のみをコンパイルの対象としています。そうすることで、コンパイル時間の短縮と、生成される実行ファイルの軽量化が期待できるからです。しかし、一回も呼び出されない関数ではあっても、その内容のエラーチェックを怠っていることも事実です。←何か解決策を練る必要がありますね。

コードを吐く過程を取り除いて、エラーチェックのみに対応するフェーズを用意するとかしないと、この問題の根本的解決はできないです。

現状で、エラーチェックのみに適したフェーズが実行できるコードを保有していないので、すぐに対応ということはできませんが、開発スケジュールを調整しつつ、修正項目の一つとして視野に入れていきたいと思います。
引用:
次に、コンパイラの誤認識?ですが、複数行コメントで、以下のような使い方をすると、Callback.wbpでエラー(*1)が発生します。
コード:
/*Sub M()

End Sub

Sub MainWnd_KeyDown(KeyCode As Long, flags As Long)
Dim Key As Long
Key=KeyCode
If Key=&H26 Then '↑キー(KeyUp)
MessageBox(0,"0",0,0)
ElseIf Key=&H28 Then '↓キー(KeyDown)
MessageBox(0,"1",0,0)
ElseIf Key=&H25 Then '←キー(KeyLeft)
MessageBox(0,"2",0,0)
ElseIf Key=&H27 Then '→キー(KeyRight)
MessageBox(0,"3",0,0)
End If
End Sub
*/
(*1「Callback.wbp(80) - "MainWnd_KeyDown" 無効な識別子です」)
それと、自分の所では、
コード:
/*
Sub MainWnd_KeyDown(KeyCode As Long, flags As Long)
Dim Key As Long
Key=KeyCode
If Key=&H26 Then '↑キー(KeyUp)
MessageBox(0,"0",0,0)
ElseIf Key=&H28 Then '↓キー(KeyDown)
MessageBox(0,"1",0,0)
ElseIf Key=&H25 Then '←キー(KeyLeft)
MessageBox(0,"2",0,0)
ElseIf Key=&H27 Then '→キー(KeyRight)
MessageBox(0,"3",0,0)
End If
End Sub
*/
でも同様のエラーが発生しました。
RADツールは、MainWnd.sbpに記述されるイベントコードを認識して、Callback.wbpを生成します。しかし、その際に複数行コメントを正常に認識できなかったため、Callback.wbpに余計なコードが生成されてしまったのが原因のようです。このバグは、次回のバージョンアップで修正しようと思います。
引用:
あと、詳細は「スクロールバーでスクロールできるソース行」ぐらいしか分からないのですが、複数行コメント(/*~*/)でたまに色が変化しないときがあります。(/*がエディタ内に表示されていない状態(スクロールをしないと表示しない)でたまに発生します。(そのとき、一番上の行(詳細不明)の2,3文字まではコメント色になっていました))
(↑情報が分かり次第、追記してみたいと思います。)
色々と検証を行ったのですが、そのような現象に出会うことができませんでした。また何か気付いた点があれば、ご指摘ください。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月28日(木) 16:36 
オフライン

登録日時: 2005年5月31日(火) 13:31
記事: 205
お住まい: 大阪市
自分のわがまま?にお付き合いいただき、ありがとうございます。

>
引用:
あと、詳細は「スクロールバーでスクロールできるソース行」ぐらいしか分からないのですが、複数行コメント(/*~*/)でたまに色が変化しないときがあります。(/*がエディタ内に表示されていない状態(スクロールをしないと表示しない)でたまに発生します。(そのとき、一番上の行(詳細不明)の2,3文字まではコメント色になっていました))
> (↑情報が分かり次第、追記してみたいと思います。)
>
> 色々と検証を行ったのですが、そのような現象に出会うことができませんでした。また何か気付いた点があれば、ご指摘ください。

こちらでも「どうやってこんなことが起きたのだろう?」と思い、色々と試してみた結果、何故か別のバグを発見しました(バグってものは無い方が良いんですけど、どのソフトにもバグってものはありますからね・・・)
コード:
/*
abcdefghijklmn
*/
opqrstuvwxyz0123456789
とすると、opqrstuvwxyz0123456789の行までコメントアウトの色になっています。(コンパイラは正常にコメントアウトではなく、関数として認識し、存在しない(無効)と言うエラーを出します。)
しかし、「*/」の前に何か文字を入力(空白とか)すると、上のような現象になりません。

何か、複数行コメントばっかりのバグを発見してしまって、すいません。m(_ _)m


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

登録日時: 2005年5月31日(火) 13:31
記事: 205
お住まい: 大阪市
やっと本当?に質問したかった物が再現しました。
でも、何故か100行ぐらいをコピペ、別のabpファイルに貼り付けても現象が発生しないと言う現象でした。ただし、ある条件に一致?すると、再現することが判明しました。
たとえば、下記のソースがあります。
コード:
/*Sub MainWnd_KeyDown(KeyCode As Long, flags As Long)
Dim Key As Long
Key=KeyCode
If Key=&H26 Then '↑キー(KeyUp)
MessageBox(0,"0",0,0)
ElseIf Key=&H28 Then '↓キー(KeyDown)
MessageBox(0,"1",0,0)
ElseIf Key=&H25 Then '←キー(KeyLeft)
MessageBox(0,"2",0,0)
ElseIf Key=&H27 Then '→キー(KeyRight)
MessageBox(0,"3",0,0)
End If
End Sub*/

Sub MP3List(OP As Long)
Dim num As Long

If OP=1 Then
If SendMessage(List,LB_FINDSTRING,0,buffer)=LB_ERR Then
SendMessage(List,LB_ADDSTRING,0,buffer)
SendMessage(List,LB_SELECTSTRING,0,buffer)

End If
ElseIf OP=2 Then
num=SendMessage(List,LB_GETCURSEL,0,0)
SendMessage(List,LB_GETTEXT,num,buffer)

End If
End Sub


/*Sub MP3List()
    Dim num As Long
    Dim buf As String
Dim ss As Long
    buf=ZeroString(110)

    num=SendMessage(List,LB_GETCURSEL,0,0)
SendMessage(List,LB_ADDSTRING,0,buffer)
    SendMessage(List,LB_GETTEXT,num,buffer)

If num=LB_ERR Then
	Exit Sub
End If

'ss=SendMessage(List,LB_FINDSTRING,-1,buffer)
ss=SendMessage(List,LB_SELECTSTRING,0,buffer)
If ss=LB_ERR Then

Else
SendMessage(List,LB_DELETESTRING,ss,0)

End If
End Sub*/
Sub MainWnd_CommandButton1_Click()
/*	Dim a as Long
	a=""
MoveWindow(hMainWnd,"",0,299,405,TRUE)*/
End Sub
形式としては
/*複数行
コメント*/

Sub *****()
実行部分
End Sub

/*複数行
コメント*/
となっていれば再現するかと思います。(各部分はそれなりに行数が無いと発生しないみたいです。)


そして、もっとも確認できるのが、デバッグコンパイルでも、リリースコンパイルでも何でも実行して、ProjectEditor内にコンパイラを表示させ、エディタのスクロールを一番下まで下げると、コメントアウトされているはずの部分がコメントアウトされているにも関わらず、色が反映されていません(最初の3文字はコメントアウトの色になっているみたいですけど・・・)。


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

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


オンラインデータ

このフォーラムを閲覧中のユーザー: Semrush [Bot] & ゲスト[10人]


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

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