トップページ⇒tech
1001コメント250KB

C言語なら俺に聞け! Part 99

■ このスレッドは過去ログ倉庫に格納されています
0001v(^o^i)dNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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/

各種リンク、関連スレは>>2-13あたり

C言語なら俺に聞け! Part 98
http://pc5.2ch.net/test/read.cgi/tech/1104114259/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0232229NGNG
>>230
調べてみます。
0233デフォルトの名無しさんNGNG
>>232
具体的に言えば、例えば、
int a[10000];
int i;
for(i = 0; i < 10000; i++)a[i]=0;
とするところを、
int* a;
int i;
a = (int*)malloc(sizeof(int)*10000);//ヒープ領域に使用領域を確保。その先頭番地のポインタ。
for(i = 0; i < 10000; i++)a[i]=0;
free(a);//確保したら開放しないとダメ。メモリは再利用…
0234デフォルトの名無しさんNGNG
>>231
90000/10 だとコンピュータ内部だと、9000回10を引いているのだと
思っているからです
0235デフォルトの名無しさんNGNG
だと
0236デフォルトの名無しさんNGNG
>>234
ハー・・・・・・・
0237デフォルトの名無しさんNGNG
はふはふ
0238デフォルトの名無しさんNGNG
さっきから考えてみてたんですが、>>202さんのって
BCDコードに変換してる訳じゃないんですね。
0239デフォルトの名無しさんNGNG
ぱふぱふ
0240デフォルトの名無しさんNGNG
さすがに>>234は本人じゃないだろ。あまりにも・・・過ぎる。
もし本人なら、真面目に考えた人が浮かばれん。
俺はパズル以外に意義を見いだせなかったから、全然考えてないけどな。
0241232NGNG
>>233
ありがとうございます。

a = (int*)malloc(sizeof(int)*100000);

これだと400kb位?使っている事になるんですよね?

0242デフォルトの名無しさんNGNG
>>240
では問いますが、除算はどのように実現されているので?
除算回路なんて一般のCPUに組み込まれているんですか?
その辺はよくわからんですが、普通加算回路しか入ってないと思ってるんですけど。
いや、ほんとよくわからないんですけど。
あまりにも・・・過ぎて申し訳ありませんねぇ
0243デフォルトの名無しさんNGNG
いわゆる筆算と同じ方式でやってるんじゃなかった?
引き戻し法とか
0244デフォルトの名無しさんNGNG
なんで割り算ごときでBCD変換だのループだの出てくるわけ?
コードが美しいわけでもない、速度は遅い、無駄に変数使う。。。
そのアルゴリズムの優れている点はどこなの?
勉強したての人がそういうの見てお手本にしたら可哀想だろうに……
0245デフォルトの名無しさんNGNG
だからBCD変換じゃないって・・・
0246デフォルトの名無しさんNGNG
コード読んでないけど、>>209でなんか言ってるじゃん。
0247デフォルトの名無しさんNGNG
>俺はパズル以外に意義を見いだせなかったから、全然考えてないけどな。
>コード読んでないけど

同一人物でつか?
0248デフォルトの名無しさんNGNG
ちげえよバカ。>>244=>>246だよ
0249デフォルトの名無しさんNGNG
もう、何がなんだか
0250デフォルトの名無しさんNGNG
> コードが美しいわけでもない

自分は結構美しいコードだと感じたけど。
0251デフォルトの名無しさんNGNG
>>247
同一っつーか、俺はこの話題については>>210>>221>>240位しか書き込んでないよ。

で、プロセッサの除算は、いわゆる筆算のアルゴリズムを使うが、
最近のプロセッサは、テーブルを使って一発で結果を出す方法も併用していると思う。
少し前にPentiumのバグで回収騒ぎがあっただろ?
あれは浮動小数の方だけど。
0252デフォルトの名無しさんNGNG
>>250
いくらなんでもそれはないだろう
0253デフォルトの名無しさんNGNG
なるほど、とんだ馬鹿な思い込みだったみたいですね。
少し前にPentiumのバグで回収騒ぎなんて話題も知りませんでした。
じゃあ、普通に割り算してたほうが早かった、って事か・・・

けど、ホント勉強になったんです。問題考えてくださった方はありがとございました。

あとついでと言っちゃあ何ですけど、static const int の static がもしなかったら、
関数が呼ばれるたびに初期値が代入されて無駄が発生するって見解は正しいですか?
0254デフォルトの名無しさんNGNG
正しいよ
0255デフォルトの名無しさんNGNG
よかった。ありがとうっす
0256デフォルトの名無しさんNGNG
goto文使うともっと速いらしいぞ
0257デフォルトの名無しさんNGNG
いまどきのコンパイラちゃんなら最適化してくれそうな気もしなくもない
0258デフォルトの名無しさんNGNG
真面目に考えてた人、ご愁傷様でした。
0259デフォルトの名無しさんNGNG
昔、除算命令で商と余り一度に取れたよね。いまのはどうなんだろ。
0260デフォルトの名無しさんNGNG
今もそうよ。
標準ライブラリにldivというのもある。
0261デフォルトの名無しさんNGNG
ファイルをオープンして書き込みするってのは処理としては早い?遅い?。
ゲーム作っててデバッグ用にどこの場所を通ってるか調べるのにLOGを
とりたいんだけどゲームみたいに中で一定の速さが必要なものを作る時
ファイルの書き込みを使ってもスピードに支障はでないレベルでしょうか?
ファイル操作+速度に関して知っておられる方おりましたら助言よろしくです。
0262デフォルトの名無しさんNGNG
ディスクのシーク+回転待ちでかかる時間が5-15ms程度。
OSやファイルシステムにも依るが、書き込みはこれを数回繰り返す。が、
・全部同期で書き込む
・ジャーナリング等の情報だけを同期で、データ本体は非同期で書き込む
・全部非同期で書き込む
等々があって、実際のwriteでどの程度かかるかは環境依存。

その上、Cライブラリのレベルでバッファリングしているから
fwriteやfprintfで実際にシステムコールが呼び出されるかはわからない。

ログの量がある程度以下と想定できるなら、
setvbufによって、事実上ディスクアクセスをfclose時だけにすることも可能。
0263デフォルトの名無しさんNGNG
>>261
速度を保証する必要があるならファイル操作ではなく物理ディスク
0264デフォルトの名無しさんNGNG
↑バカ
0265デフォルトの名無しさんNGNG
h = _open( "sakenosakana.txt", O_RDWR | _O_CREAT, _S_IREAD | _S_IWRITE ) ;
fp = fopen( argv[1], "r" ) ;
fscanf( fp, "%s" ,buf ) ;
_write( h, buf, 10 ) ;

ちょっと省略しますが、こんな感じで新規のファイルを作ろうと思いました。
しかし、出来上がる場所が実行ファイルと同じ場所と思ってたんですが、そうでも
ないみたい。なぜ??
どうにかして、場所を指定できないですか?
0266デフォルトの名無しさんNGNG
>>265
普通ファイル名だけを指定するとカレントディレクトリを指定したものと見なされる。
どこかから実行ファイルの場所を得て、そこへファイル名をくっつけて使え。
0267デフォルトの名無しさんNGNG
おぉ! なんとか出来ました。

けど、
> 普通ファイル名だけを指定するとカレントディレクトリを指定したものと見なされる。
自分も、そう思ったんですけど、出来上がる場所はなぜか
C:\Program Files\Common Files\System\Mapi\1041
これは _write とかの仕様なんですかね。
0268202NGNG
一応、
  1. プロセッサが除算をサポートしていないか、あってもコストが高い
  2. 実行速度を最優先
というつもりで書いたんだけど
>>253
あぁそうでつか…orz
0269デフォルトの名無しさんNGNG
>>267
詳細は環境スレでどうぞ。_open()でさえスレ違いですから。

http://pc5.2ch.net/test/read.cgi/tech/1104843249/
http://pc5.2ch.net/test/read.cgi/tech/1104109858/
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
0270デフォルトの名無しさんNGNG
>>267
たぶんおまえのプログラムの他の処理でカレントディレクトリを
移動しっぱなしの処理があるんだろ
0271デフォルトの名無しさんNGNG
> free(a);//確保したら開放しないとダメ。メモリは再利用…

するなよぼけ > 開放
するなら「解放」だぼけ。
0272デフォルトの名無しさんNGNG
>>226
ふつうに int array[100000]; で確保すればいい
どっかのぼけが「多くの領域」を定義せずにヒープがどうのと言っているが
そういう井の中の蛙は free についても人のコードを自分の環境に合わさせようと画策するから
言うこと1つずつうざいくら疑ってかかれ
決してああなるな
0273デフォルトの名無しさんNGNG
>>272
・・・すげーネタレスだな、おい。
最低限、 size_t 型で表現できる分の配列しか
宣言できないぐらいの事は書けよ。

>>226
言うこと1つずつうざいくら疑ってかかれ
決して >>272 の様になるな
0274デフォルトの名無しさんNGNG
>size_t 型で表現できる分の配列しか

アホ
0275デフォルトの名無しさんNGNG
とんだアフォ>>273 がいるもんだなぁ
0276デフォルトの名無しさんNGNG
なに?>>272-273は自演釣りですか?
0277デフォルトの名無しさんNGNG
>>271からの流れがワンダホーな世界だ
0278デフォルトの名無しさんNGNG
10進数を2進数にする、一番簡単で短いプログラムってどんなのですか?
0279デフォルトの名無しさんNGNG
>>278
二進数にするとは、どのような意味だ?
0280デフォルトの名無しさんNGNG
また三田レベルが来たか
0281デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1048088635/135
0282デフォルトの名無しさんNGNG
>278
x86汗ではAAD命令。
0283デフォルトの名無しさんNGNG
int x=5,y=6;
int st[(x*y)];

こんな風にしたいんですけど、エラーでちゃいますよね。
どうしたらいいんですか?
0284デフォルトの名無しさんNGNG
>>283
malloc
0285デフォルトの名無しさんNGNG
>>283
C止めろ。
0286デフォルトの名無しさんNGNG
>>1を読むかC99準拠のコンパイラを使う
0287デフォルトの名無しさんNGNG
>>283
C99ならできるよ。
おたくのコンパイラが古いだけ。
0288283NGNG
ぅありがとぉう
0289デフォルトの名無しさんNGNG
>>287
仮想の代物であるC99完全対応のコンパイラなんて、現時点に於いて期待する方がおかしい。
0290デフォルトの名無しさんNGNG
mallocで二次元配列を確保できますか?
0291290NGNG
解決しました。
0292デフォルトの名無しさんNGNG
>>290
a[i][j]のようにアクセスできる領域は作れる
0293デフォルトの名無しさんNGNG
最初っから要素数がわかってる場合は簡単。
そうでない場合は>>292の言ってるように少しややこしい
0294デフォルトの名無しさんNGNG
>>292-293
解決したって書いてあるだろうがボケ
0295デフォルトの名無しさんNGNG
>>294
おまいがボケ
0296デフォルトの名無しさんNGNG
>>295
なんだと、このやろ
0297デフォルトの名無しさんNGNG
>>296
素敵
0298ミスターポポNGNG
喧嘩、良くない
0299デフォルトの名無しさんNGNG
ミスターポポの口でイマラチオしたい
0300デフォルトの名無しさんNGNG
> 仮想の代物であるC99完全対応のコンパイラなんて

あ、またVC厨がわいてでた ;-)
0301デフォルトの名無しさんNGNG
10種類は?
0302デフォルトの名無しさんNGNG
unsigned long long intの使えるコンパイラー10種類なんて、すぐに名前あげられそうなもんなのに。
なんでそんなにひっぱるんだろ。
0303デフォルトの名無しさんNGNG
いまんところ1種類も出てないわけだから、C99完全対応のコンパイラ
は仮想とするのは、このスレ的に真
0304デフォルトの名無しさんNGNG
part99だし、C99使ってもいいか。
0305デフォルトの名無しさんNGNG
> いまんところ1種類も出てないわけだから、C99完全対応のコンパイラ

このお題目をとなえれば、VCの存在が正当化されるとでもおもってるんだろうなあ。
毎回これしかいわないんだもの ;-)
0306デフォルトの名無しさんNGNG
使えなものを使えという理不尽さ。
0307デフォルトの名無しさんNGNG
実際には存在するんだから「1種類もない」は大うそだな。
つぎは「少ないから」とかいいそう。

最初は「long longなんて使えるコンパイラーはないから」だったのが
↓
「…少ないから」 にかわって、大概のコンパイラーで使えるようになった数年前からは
↓
「それはつかえるかもしれんが、C99の機能全部をサポートしたコンパイラーはないから」(理由になってない)
になってきたわけだが、それが
↓
「C99の機能を全部サポートしたコンパイラーは数少ないから」
になってしまって、
その「から」のあとに何が続くのか...
「だからVCつかってるのは正しいんだ!」って、かなり無理があるなあ。

まあ無理があるからあえて後半を書かないわけだが。
0308デフォルトの名無しさんNGNG
302と303をみれば一目瞭然!
302の人は
> unsigned long long intの使えるコンパイラー10種類なんて、すぐに
と言ってるのに、
303のやつは
> いまんところ1種類も出てないわけだから、C99完全対応のコンパイラは
と、
「unsigned long long intが使えるコンパイラー」と言ってるのを
あえて「きこえないふり」をして「C99完全対応しているコンパイラーは」とすりかえた
つもりになって、それでごまかせてるつもりになってるのがいかにもVC厨だなあ。
0309デフォルトの名無しさんNGNG
あのー いまどき VCでもunsigned long long intぐらい使えるんですが(って最近ですが)、
実際私は使っているのですが、
その、あなたのいう「VC厨」っていう人たちは何をこわがってるんでしょうか?
0310デフォルトの名無しさんNGNG
↑309
おまえみたいに正規版を買ってるやつはいいが、
ここにいるVC厨は、イリーガルコピー品なので、まだ古いVCつかってるんだよ!
0311デフォルトの名無しさんNGNG
>>310
そんなわけないじゃん。妄想癖?
0312デフォルトの名無しさんNGNG
っていうかそもそも、たとえば一番多く使われている「gcc」。
こいつのどこが「C99に対応していない」かを知っているVC厨はほとんどいない。

「どうやらC99完全対応じゃないらしい」とだけ聞きかじって、実際にどこがどうかとか
までは知らないので、いわれてもでてこないんだよな。だめすぎ。

完全対応しているコンパイラーは私の知る限りでは2種類だけだ(2004年夏の時点で)
0313デフォルトの名無しさんNGNG
> そんなわけないじゃん。

ひっしだな!
0314デフォルトの名無しさんNGNG
やーい > VC厨
0315デフォルトの名無しさんNGNG
うんこー!!
0316デフォルトの名無しさんNGNG
誰もVCなぞ話題にしてないのだが。VCの素晴らしさがそんなにくやしいですか?
0317デフォルトの名無しさんNGNG
みんな!!!うんこトークしようぜ!!!!!
0318デフォルトの名無しさんNGNG
>>312
で、10種類は?
0319デフォルトの名無しさんNGNG
まあ、たしかに gcc -std=c99 で何も不便は感じないな。
おれの知ってるかぎりのC99の機能は使っているが。
0320デフォルトの名無しさんNGNG
まずstdbool
0321デフォルトの名無しさんNGNG
-std=C99すれば、#include <stdbool.h> して、なーんにも問題なく
boolもtrueもfalseも使えるぞ。

おまえ使ったこともないのか? > 320
やーい。ぼけすぎ
0322デフォルトの名無しさんNGNG
*p++=*q++
0323デフォルトの名無しさんNGNG
Cの基本だな > *p++ = *q++;
昔のCから一番かわってない部分。
0324デフォルトの名無しさんNGNG
>>321
a-ha、so 10 of compilers, you know?
0325デフォルトの名無しさんNGNG
その前に80種類のコンパイラーだろ?
0326デフォルトの名無しさんNGNG
ofじゃないな
0327デフォルトの名無しさんNGNG
うんこー!!! おいしいよこのうんこ!!
0328デフォルトの名無しさんNGNG
^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D
0329デフォルトの名無しさんNGNG
>>326
おまえ英語の成績悪いだろ?
0330デフォルトの名無しさんNGNG
なんや。このスレも結局HSPスレと同レベルやん。
0331デフォルトの名無しさんNGNG
VC厨がおおいからね
■ このスレッドは過去ログ倉庫に格納されています