C言語なら俺に聞け! Part 112
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2005/08/08(月) 01:32:01質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
C言語なら俺に聞け! Part 111
http://pc8.2ch.net/test/read.cgi/tech/1121657911/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0876デフォルトの名無しさん
2005/08/26(金) 17:21:01strlenやstrcpyを使っているとします。
この時、あるプログラムで関数Bとstrlenやstrcpyを使っている場合、
リンク時にstrlenやstrcpyのコード(?)が重複してプログラムに置かれたりは
しないのでしょうか?
0877デフォルトの名無しさん
2005/08/26(金) 17:26:13しない。
0878デフォルトの名無しさん
2005/08/26(金) 17:35:350879デフォルトの名無しさん
2005/08/26(金) 20:55:54double a, b;
printf("例えばこんなところに(%d, %d)座標が入ってたり\n\t制御コードが入るとね\n", a, b);
0880デフォルトの名無しさん
2005/08/26(金) 21:58:42氏の言語に対する罵倒は、一種の愛情表現ですから。
0881デフォルトの名無しさん
2005/08/26(金) 22:23:21ってえことは、COBOLさいこー、FORTRANまんせーってことですな。
0882デフォルトの名無しさん
2005/08/26(金) 22:41:27ライブラリ作るとき、もうちょっとキレイなインターフェースを考えられなかったのかな。
世界で一番有名になってしまったこのprintfのおかげで、世の中、
発想がprintfしてるインターフェース設計が多すぎ
0883デフォルトの名無しさん
2005/08/26(金) 22:46:480884デフォルトの名無しさん
2005/08/26(金) 22:50:47Javaのprintfを見て、Javaを使うのを止めた
0885デフォルトの名無しさん
2005/08/26(金) 23:07:27型チェックが効かないってのは痛いけど、見た目は美しいと思うんだが。
0886デフォルトの名無しさん
2005/08/26(金) 23:10:580887デフォルトの名無しさん
2005/08/26(金) 23:20:06Javaやってないから何なのかと思って調べてみたら
printfが標準で無いのか
不便すぎるな
0888デフォルトの名無しさん
2005/08/26(金) 23:25:46標準にあるよ。
0889デフォルトの名無しさん
2005/08/26(金) 23:29:10J2SE5から実装されたのか、スマンカッタ
0890デフォルトの名無しさん
2005/08/26(金) 23:29:55くそみそ書いてた。
0891デフォルトの名無しさん
2005/08/26(金) 23:34:420892デフォルトの名無しさん
2005/08/26(金) 23:36:59まずは >>882 が考えている「美しいインターフェース」を持った
ライブラリとはどんなものかを伺おうじゃないか・・・
0893デフォルトの名無しさん
2005/08/26(金) 23:42:260894デフォルトの名無しさん
2005/08/26(金) 23:44:25便利さならphpとかのprintがいいと思うけど
0895デフォルトの名無しさん
2005/08/26(金) 23:44:33puts "rubyは気絶するほど美しい(#{x},#{y})"
0896デフォルトの名無しさん
2005/08/26(金) 23:47:54printf の偉大さが身にしみてくるんだな、これが。
0897デフォルトの名無しさん
2005/08/26(金) 23:48:130898デフォルトの名無しさん
2005/08/26(金) 23:48:59と言いたかったがここはCスレ(´・ω・`)ショボーン
0899デフォルトの名無しさん
2005/08/27(土) 00:04:53と言いたかったがここはCスレ(´・ω・`)ショボーン
0900デフォルトの名無しさん
2005/08/27(土) 00:05:22効率が良いとは言えないんじゃないか。プログラムサイズも大きくする原因になるし、任意の
文字列をchar の配列で取得して、第一引数にそのまま渡すだけなら%があると正常に出力できな
いだけでなく、セキュリティ面の問題もあるそうだな。
putsを使ったり、最後に改行を追加したくないならfputsやprintf("%s", "文字列"); を使ったり
しないものなのかいな。
0901デフォルトの名無しさん
2005/08/27(土) 00:10:130902デフォルトの名無しさん
2005/08/27(土) 00:11:430903デフォルトの名無しさん
2005/08/27(土) 00:12:58それはある。効率が悪いよね。
0904デフォルトの名無しさん
2005/08/27(土) 00:15:10何で?
0905デフォルトの名無しさん
2005/08/27(土) 00:18:07文字列として確保されてしまうか、
かな
0906デフォルトの名無しさん
2005/08/27(土) 00:20:41効率も何もない希ガス。
0907デフォルトの名無しさん
2005/08/27(土) 00:29:04printf()だと文字列に対して%の書式指定がないか検索が行われるから。
0908デフォルトの名無しさん
2005/08/27(土) 00:31:280909デフォルトの名無しさん
2005/08/27(土) 00:31:33そりゃ無いに越したことはないけどさ
0910デフォルトの名無しさん
2005/08/27(土) 00:34:12と言いたかったがここはCスレ(´・ω・`)ショボーン
0911デフォルトの名無しさん
2005/08/27(土) 00:34:41printf("先生、93バイトの文字列を先頭から順に調べましたが、パーセント文字は一つもありませんでした。\n");
printf("全く、何だよ。忙しいというのに余計な手間を掛けさせあがって。\n");
printf("puts()で書いてくれないと無駄な時間をロスして仕事が遅れるじゃないか\n");
0912デフォルトの名無しさん
2005/08/27(土) 00:36:05とはいえ、そういうところにも気がまわるようになるべきだと思う。
無意識のうちに printf("\n") ではなく putchar('\n')を選択できるようにね。
計算機にできることは、計算機にやらせるべきというのも正しいけど、
無駄なコードは一行たりとも書かんという気概でいてほしい。
0913デフォルトの名無しさん
2005/08/27(土) 00:38:12毎回検索に失敗してたら分岐予測が効くから、
いう程は低速化しない希ガス。
0914デフォルトの名無しさん
2005/08/27(土) 00:43:28>>908
0915デフォルトの名無しさん
2005/08/27(土) 00:46:48>別に今のPCならその程度のオーバーヘッドなんて十分に無視できる希ガス
×今のPCなら
○IO自体の低速さに比べたら
0916デフォルトの名無しさん
2005/08/27(土) 00:47:160917デフォルトの名無しさん
2005/08/27(土) 01:14:45ように思えるだろう。揚げ足を取ってるようにも思えるだろう。そして、それにこだわりす
ぎて前に進めないということもあるだろう。
プログラムの学習の一番初めのときから既に、無駄を省くことばかり知恵を働かせるように
してるが。
0918デフォルトの名無しさん
2005/08/27(土) 01:23:570919デフォルトの名無しさん
2005/08/27(土) 01:30:480920デフォルトの名無しさん
2005/08/27(土) 01:33:04それはWindowsの馬鹿プログラマには関係ない
0921デフォルトの名無しさん
NGNGいやバグのなさだろ。
移植以前にまともに動かないと。
0922デフォルトの名無しさん
2005/08/27(土) 01:37:210923デフォルトの名無しさん
2005/08/27(土) 01:37:24バグがないコードだと思うのか?
バグの無いコードは重要以前の問題だろ
0924デフォルトの名無しさん
2005/08/27(土) 01:38:18プログラミングはアートだ。
0925デフォルトの名無しさん
2005/08/27(土) 01:38:32バグのないコード?
そんなのどこにある
0926デフォルトの名無しさん
2005/08/27(土) 01:38:57バグを無しに近づけることが重要。
0927デフォルトの名無しさん
2005/08/27(土) 01:43:06なんかレベル低いねこのスレ。
0928デフォルトの名無しさん
2005/08/27(土) 01:44:34int main(void)
{
puts("何言ってんだ");
return 0;
}
------------------------
上は「何言ってんだ」を標準出力するプログラムです。
バグはありません。
0929デフォルトの名無しさん
2005/08/27(土) 01:49:01いやそう思うならそれでもいいけど
0930デフォルトの名無しさん
2005/08/27(土) 01:49:190931デフォルトの名無しさん
2005/08/27(土) 01:52:510932デフォルトの名無しさん
2005/08/27(土) 01:55:300934デフォルトの名無しさん
2005/08/27(土) 01:55:54コンパイラがCで書いてあって、具体的なバグについての議論ならOK。
0935デフォルトの名無しさん
2005/08/27(土) 01:56:390936デフォルトの名無しさん
2005/08/27(土) 01:58:100937デフォルトの名無しさん
2005/08/27(土) 02:16:07バグがない事を証明してください
0938デフォルトの名無しさん
2005/08/27(土) 02:41:24面白くないよ
0939937
2005/08/27(土) 02:48:47「バグの不在は(少なくとも現実的な手間では)証明出来ない」
ということを知らない人がいるみたいだから。
0940デフォルトの名無しさん
2005/08/27(土) 03:00:31すべての入力に対して正しい出力が得られればそれは正しい。
そしてそのすべての対応をチェック可能であればバグ無しが証明できる。
0941デフォルトの名無しさん
2005/08/27(土) 03:12:310943デフォルトの名無しさん
2005/08/27(土) 03:51:04無限くらい証明できるんじゃない?
0944デフォルトの名無しさん
2005/08/27(土) 03:57:280945デフォルトの名無しさん
2005/08/27(土) 03:58:14仕様にかかれていない範囲での入力に対して、出力に不都合があっても、
それはバグではない
仕様上、入力が有限なら、バグのないことを証明することも可能だ。
といってみるテスト
0946デフォルトの名無しさん
2005/08/27(土) 04:14:430947デフォルトの名無しさん
2005/08/27(土) 04:20:52修正しないのかと
0948デフォルトの名無しさん
2005/08/27(土) 04:33:49たとえば外部デバイスから送られる数値の範囲が仕様で0〜255って決まってたら、
数値が-1や256だったときの動作まで保証する責任はない。
0949デフォルトの名無しさん
2005/08/27(土) 04:36:380950デフォルトの名無しさん
2005/08/27(土) 04:36:53を
puts("abc");
に最適化するコンパイラもあるというのに……
0951デフォルトの名無しさん
2005/08/27(土) 04:38:110952デフォルトの名無しさん
2005/08/27(土) 04:40:450953デフォルトの名無しさん
2005/08/27(土) 04:41:57#最初見たときは目が点になったw
0954デフォルトの名無しさん
2005/08/27(土) 04:46:56システムの設計能力なさそう
0955デフォルトの名無しさん
2005/08/27(土) 05:22:25手元のもそうなった
gccすげーな
gccのGはGNUじゃなくてGodなんじゃないか?
0956デフォルトの名無しさん
2005/08/27(土) 06:17:02この業界、なにかとgccマンセーな雰囲気があるが、
商用コンパイラと比べると見劣りすることも多々あるよ。
たとえば、gccはARMプロセッサ向けのコンパイルでは、
IARやARMのコンパイラと比べて、サイズは馬鹿でかくなるし実行速度も遅い。
組み込み向けの資源が厳しい環境で、これは致命的。
0957デフォルトの名無しさん
2005/08/27(土) 08:42:20ハゲドウ!
0958デフォルトの名無しさん
2005/08/27(土) 10:46:03一般的なプログラムは無理だけれど、特殊なプログラムはできる。
あなた、数理論理学をまともに勉強したこと、本当にあるの?
0959デフォルトの名無しさん
2005/08/27(土) 10:46:23言ってない奴に限って
「M...N の総和を求めろ」
をループで組んだりするんだが…
0960デフォルトの名無しさん
2005/08/27(土) 10:46:43組み込みの世界ではCが使えるだけでも満足すべきだ!
0961デフォルトの名無しさん
2005/08/27(土) 10:51:52使い方によっては、ループの方が速かったりして。
0962デフォルトの名無しさん
2005/08/27(土) 11:42:41x回ループする時に、進行状況を1%、2%と表したいのですが、%が整数の時だけを見極める方法を教えて下さい。
0963デフォルトの名無しさん
2005/08/27(土) 11:44:40i 回目のループで i * 100 / x %
0964デフォルトの名無しさん
2005/08/27(土) 11:44:44ごめん、正規表現ライブラリの前にはかすんで見える。
0965デフォルトの名無しさん
2005/08/27(土) 11:54:530966デフォルトの名無しさん
2005/08/27(土) 12:00:26数十MBや100MB以上のファイルを扱うのでreadやwriteは必須だな。
0967962
2005/08/27(土) 12:04:40ぴったり整数になる時だけ判定できないでしょうか?
0968デフォルトの名無しさん
2005/08/27(土) 12:06:400969デフォルトの名無しさん
2005/08/27(土) 12:07:03判定する必要無いんじゃないの?
0970デフォルトの名無しさん
2005/08/27(土) 12:07:290971デフォルトの名無しさん
2005/08/27(土) 12:08:310972デフォルトの名無しさん
2005/08/27(土) 12:11:066%2は0だけど、2/6は33.33...%ジャマイカ
0973デフォルトの名無しさん
2005/08/27(土) 12:14:53ということにはならんだろ。
下手をすれば、0と100%のときだけしか表示しないことになるんじゃないか。
0974デフォルトの名無しさん
2005/08/27(土) 12:21:11先に100倍なんじゃないか
0975デフォルトの名無しさん
2005/08/27(土) 12:22:49int main(void)
{
int i, x = 6;
int b = -1;
for (i = 1; i <= x; i++) {
if (b != i*100/x) {
printf("%d\n",i*100/x);
b = i*100/x;
}
}
return 0;
}
レス数が950を超えています。1000を超えると書き込みができなくなります。