小柳です。こんばんは。 Hidemi KAWAI wrote: > > こんばんは、川合です。 > > ええと、sprintf()なら、実は既にあります(GOを作るときに作りま > した)。適当に体裁を揃えれば使えそうです(だから1日あれば、とOSA > SK-Wikiに書いたわけですが)。%dも%sも%cも多分使えたと思います。 > %fは使えません。sprintf()があるので、cputs()と組み合わせてprintf > ()作ることもできるでしょう。 > > ただ、これがあったらあったで、乱用する人が出てきてしまうのが、 > 頭痛の種ではあります。sprintf()はそれなりに大きいですからねえ。 > OSASKでは自然にアプリを小さくする方向へ仕向けるために、その手の > ライブラリ関数の組み込みにあまり熱心ではなかったという経緯があり > ます。 アプリが大きくなってしまうのは、今のところ OSASK において、Cで書かれた プログラムが DLL を使用することができず、printf* 系の関数もスタティック リンクするしかないからというのも理由の一部かと思います。 Linux では、*printf系は、libc.so にあって、ダイナミックリンクして 使われるのが普通ですし。 > 初心者は、printf()があるとどうしてもこれを使いたくなってしまい > 、これに頼る傾向が出てくるでしょう。そうすると、setdec()のような > ことをやる人が少なくなって、setdec()はなんだか知らないが高度なこ > とだという誤った印象が広がって、結局みんなでかいアプリばかり作る > というOSASKらしくない結論にいたる可能性があります。それだけが心 > 配です。 これは上のスタティックリンクの件も含めてはっきりと説明して、その上で アプリ製作者に判断を任せるというので問題ないでしょう。 説明の例 (1)OSASK アプリケーションのエディタ teditc は 10kB 程度だが、それに比べ て *printf系の関数は??kBと大きい。 (2)sprintf(buf, "%d %c %s", i, j, buf); を setdec() 他を用いて書き直すと ??kB の節約となる (3)だからアプリケーションを書く場合は、*printf() は必要最小限にして欲し い 実際のところ、問題としている sprintf() 関数はどれくらい大きいのですか? > 僕みたいな性格でさえ、たいてい最初はデバッグのときだけ使うつも > りだったりするわけですが、気が付くといっぱい使っていて、面倒だか > らこれでいいや、とかになりそうな気がします。どう思われますか? ・デーモンやサービスのようなバッググラウンドで動くプロセスのログ出力 ・計算や計測を行うプログラムの結果表示 ・インタプリタのような対話型プログラム と私が今思いつくだけでもこれだけあります。 そもそもプログラム作成にかけるコストと、プログラムのサイズにかけるコス ト は作成者が秤にかけるものではないでしょうか。 どうも [OSASK 6482] は、 「*printf() をスタティックリンクされるとアプリケーションのサイズが 大きくなるから、(川合さんは) *printf() という選択支を提供するのに気が 進まない」 と私には聞こえて納得できません。もう少し詳しい説明をお願いします。 上の printf() のドキュメントは必要なら私が書いてもいいです。 -- 小柳 雅明(http://homepage1.nifty.com/dreaming/) 「人の足を止めるのは"絶望"ではなく"諦観" 人の足を進めるのは"希望"ではなく"意志"」 -- ARMS