- 【QBASIC互換!?】FreeBasic【GPL】
671 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:04:30.43 ID:/Q0b75iC - >>669
そのマイクロソフト自身も現在はシステムハンガリアンの使用を禁止しているよ 動的型付け言語ならまだ有効だと思うけど、今となっては悪習の1つだな アプリケーションハンガリアンは使い方次第では有効だから良いけどね 強制するつもりはないから、あくまで参考程度に聴いてくれると助かる >Basic は型を多少間違えても、適当に直して解釈してくれる 暗黙のキャストはFreeBASICでもあるけれども(例:double型からinteger型への代入) 値型とポインタ型は全く別物だから、暗黙のキャストを通してしまうと とんでもない誤動作が起きてしまうから、コンパイラが知らせてくれるのよ 以前にポインタ型は参照型ではないと言ったのも、その理由から 例えば、integer型をinteger ptr型に暗黙的に代入できたら integer型の数値がアドレスに変換されて 別のアプリケーションが専有するメモリや未定義のメモリ領域を参照して とてつもない破壊活動が行われてしまう アセンブリをやっていたなら、その辺りの怖さを知っていると思う
|
- 【QBASIC互換!?】FreeBasic【GPL】
672 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:20:26.05 ID:/Q0b75iC - >>670
そういう習慣は、言語に合わせて替えていくべきだと思うよ そういえば、>>665のコードではconstを気にしていなかったけど 変数宣言で変化のないものは定数とするべきだな、よく忘れるw >>665のコードの動作確認していないけれど、動いてる? 色々と興味深い話、ありがとね、凄く勉強になるよ Fortranとか名前位しか知らないよw
|
- クラス名・変数名に迷ったら書き込むスレ。Part26 [無断転載禁止]©2ch.net
602 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:38:07.71 ID:/Q0b75iC - >>601
自分が自分を信じられないなら自分が自分を信じてる自分を信じろ 関西人なら通じる
|
- 【QBASIC互換!?】FreeBasic【GPL】
673 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:47:25.17 ID:/Q0b75iC - >>671
>integer型をinteger ptr型に暗黙的に代入できたら FreeBASICでは「警告」しか発しないので注意ね コンパイルは通ってしまう 古いコードとの互換性の為だと思うんだけど はっきり言ってコンパイルエラーで良いと思うんだけどね
|
- クラス名・変数名に迷ったら書き込むスレ。Part26 [無断転載禁止]©2ch.net
607 :デフォルトの名無しさん[sage]:2016/09/18(日) 16:13:20.39 ID:/Q0b75iC - 質問者も回答者も必要としているから来ているのに
全否定するなら来なきゃいいのにね コミュニティ(プロジェクトチームだよね?)が存在するなら 規約があるだろうに
|
- 【QBASIC互換!?】FreeBasic【GPL】
675 :デフォルトの名無しさん[sage]:2016/09/18(日) 23:19:13.94 ID:/Q0b75iC - >>674
Windows APIを調べて書き直して、動作確認してみた 色々と勘違いと間違いがあったので動いたコード載せておくよ #Include "windows.bi" Const StrLength As Long = 5120 Dim IniFile As String = ExePath + "/VB.ini" Dim strValue As ZString*StrLength Dim strValuePtr As ZString Ptr = @strValue Dim strValueSize As Long = GetPrivateProfileSectionNames(strValuePtr, StrLength, IniFile) If (strValueSize + 2) = StrLength Then End ' この判定はもっと良い方法があるはず Dim count As Integer Dim Zcount As Integer While count < strValueSize Dim tmp As String = *strValuePtr Dim length As Integer = Len(tmp) + 1 count += length strValuePtr += length Zcount += 1 Print tmp If Zcount > 1000 Then Exit While Wend
|
- 【QBASIC互換!?】FreeBasic【GPL】
676 :デフォルトの名無しさん[sage]:2016/09/18(日) 23:20:56.59 ID:/Q0b75iC - >>674
まず、ファイルオープンいらない APIにHandleを渡す必要無いのに何故ファイルをオープンする必要があるのかって思ってた そもそもFreeBASICはFreeFileでLong型のファイルナンバーで管理している 次にファイル名は、ini拡張子でないと読み込んでくれない GetPrivateProfileSectionNamesの第一引数にバッファのポインタ、第二引数にバッファサイズを渡す その戻り値はエラーコードじゃなく、使用したバッファサイズを返す バッファサイズが足りない場合は、指定したバッファサイズ-2の値が返る 横着なことせずに、ちゃんと調べるべきだった
|
- 【QBASIC互換!?】FreeBasic【GPL】
677 :デフォルトの名無しさん[sage]:2016/09/18(日) 23:39:22.82 ID:/Q0b75iC - >>676
自分の勘違い間違いまとめ GetPrivateProfileSectionNamesにバッファへのポインタを渡すから 第二引数にバッファサイズを渡すのは至極当然のことなのに 使用したバッファサイズを返す値と勘違いしていた それも戻り値がエラーコードだと思ってたからなんだけど GetPrivateProfileSectionNamesがファイルのオープンから読み込みまで 全部引っ括めてやると思っていなかった だからファイルオープンが必要なんだろうと、ちょっと引っかかっていたけど そのまま流した ファイル名、これは全然動作に関係ないと思ってた INIもTXTも同じ物だしって単純な思考
|