ab.com コミュニティ
https://www.activebasic.com/forum/

コンパイラが出すエラーの文字列で・・・
https://www.activebasic.com/forum/viewtopic.php?t=165
ページ 11

作成者:  Mario2 [ 2005年7月08日(金) 20:15 ]
記事の件名:  コンパイラが出すエラーの文字列で・・・

ActiveBasic4.02.00で(多分最新版でも同じことが発生するかもしれませんが)、たとえば
コード:
Sub MusicFileOpen(FileName As BytePtr)
(処理)
End Sub
というSubがあり、それを呼び出すとき、
コード:
MusicFileOpen(Mid$(buffer,hTop+2))
(Mid$を何かの文字列に代入?すればエラーはなくなると思いますが・・・)
を使うと、
MainWnd.sbp(48) - "MusicFileOpen関数の第1パラメータ"はポインタ(以下略)
と出るのですが、自分的には
MainWnd.sbp(48) - "MusicFileOpen"関数の第1パラメータはポインタ(以下略)
が良いと思うのですが、どうでしょうか?
自分的には関数の部分だけを「"」で囲うほうが良いんじゃないかと思いまして・・・・・
まぁ、ほとんどエラーの内容が分かるので、気にしてないんですけど、一応気になりましたので(微妙に矛盾…)、投稿しておきます。
皆さんはどうなんでしょうかね?

作成者:  tak [ 2005年7月08日(金) 21:36 ]
記事の件名: 

コンパイラの内部事情なので、仕方ないです。
例えば、コンパイラが内部で次のようなフォーマットを保持していたとしましょう。
  1. %s関数の第%dパラメータ
  2. "%s"はポインタ変数型です。文字列演算を指定することはできません
C言語の sprintf()関数のようなもので 1. の %s には "MusicFileOpen" という文字列が、%d には "1" という文字列が格納されたとします。
これをバッファに格納しておき、2. の %s にそのままこのバッファを格納すると、

 "MusicFileOpen関数の第1パラメータ"はポインタ変数型です。文字列演算を指定することはできません

という文字列が生成されるわけです。
このように多重的に sprintf()関数を利用するのならば、ダブルクォートの移動は不可能ですよね。

作成者:  Mario2 [ 2005年7月09日(土) 00:20 ]
記事の件名: 

> このように多重的に sprintf()関数を利用するのならば、ダブルクォートの移動は不可能ですよね。

そうなんですか。勉強になります。回答ありがとうございます。

作成者:  mako20 [ 2005年7月09日(土) 00:49 ]
記事の件名: 

でも、全角の”は、使おうとすれば使えると思いますが?

コンパイラは全角を文字として認める特性があるので(yacc/lexを少し経験したときに思いました)

作成者:  Abs [ 2005年7月09日(土) 14:05 ]
記事の件名: 

これは、製作上の都合だと思います。
以下のコードで実現できます。
コード:
#include <stdio.h>

void main()
{
	char* pmsg = "\"%s\" 関数の第%dパラメータ";
	char* pmsg2 = "%sはポインタ変数型です。文字列演算を指定することはできません";
	char sztmp[256];
	char szmsg[256];
	
	sprintf(sztmp, pmsg, "MusicFileOpen", 1);
	sprintf(szmsg, pmsg2, sztmp);
	printf(szmsg);
	
}

作成者:  Abs [ 2005年7月09日(土) 15:44 ]
記事の件名: 

"コンパイラの内部事情"とは、"制作上の事情"と言うことなんですね。
失礼しました。

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/