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

C言語の質問スレッド<42>

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C言語に関する質問はここでしてください。

問題をちゃんと切り分けて、Cの話かそうでないか洗ってから質問してくれ。
というより、聞く前に一応 Web で検索しろ。
コンパイラを探してるなら >>2 を見ろ。
過去ログ(DAT落ちあり)なら>>3-100あたりにあるかも。

GUIとか、C標準でできない事の質問は使ってる開発環境のスレに逝ってくれ。
ソース丸投げ、宿題、書籍 は専門の別スレがあるからそこへ逝ってくれ。

未定義・処理系依存ネタはご遠慮ください。
誰かが(故意にではなく)それらの書き込みをしても、いちいち突っ込まないでください。
規格オタクはこのスレッドには必要ありません。論争したかったら独自にスレッドを立ててそこでやってください。


C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/


前スレ <41>
http://pc3.2ch.net/test/read.cgi/tech/1036876790/
0322デフォルトの名無しさんNGNG
>>319
たまーに、仮想アドレス0x0周辺を書き換えておいてノホホーンと
さきにいくような処理系とOSが…あるのかな?
0323デフォルトの名無しさんNGNG
>>320
mallocがそんなことしちゃったら規格はずれになっちゃうよ。
g_mallocだと思う。そんな関数しらないけど。
0324デフォルトの名無しさんNGNG
>>322
DOSとか。
0325デフォルトの名無しさんNGNG
>>323
glibc じゃないよ。glib ね。Gtk+ に使われてるやつ
0326デフォルトの名無しさんNGNG
getsもあんな危険な関数だけど、標準ライブラリ関数だから仕様を勝手に変えたりライブラリから外すわけにはゆかないんだよね。
0327デフォルトの名無しさんNGNG
>>325
じゃあ多分g_mallocだと思うよ。
標準のmallocとかぶっちゃうし。
0328デフォルトの名無しさんNGNG
>>322
AIXとか。
0329デフォルトの名無しさんNGNG
しかしmallocがNULLを返したからと言って大した対処もできないならg_mallocのようにするのも良いかと思う。
0330デフォルトの名無しさんNGNG
>>321
たかだかネスト2つだと思うんだけど、どういうやり方してんの?
0331デフォルトの名無しさんNGNG
>>330
脳内ネストの事だろ、きっと。
0332319NGNG
結構あるんだな・・・
まあ自分専用のプログラムでもないかぎりは、mallocの戻り値チェックは鉄則だと思うけどね。
0333デフォルトの名無しさんNGNG
>>329
よく「mallocできないと落ちる」ラッパー作るよね。
「mallocできないとエラーハンドラ呼び出す。
ハンドラは変えられる。デフォルトはabort。」
としてくれると良いかも。
0334デフォルトの名無しさんNGNG
>>330
んで、そもそもなんで2つに分けたいか聞きたいんだけど。
単に「わかりにくい」とかいう主観的なのは却下ね。
033532NGNG
See you again!!
0336デフォルトの名無しさんNGNG
わかりにくい以外に理由がいるか?
0337デフォルトの名無しさんNGNG
>>333
#include <stdlib.h>
void *g_malloc(size_t size)
{
void *p;
p=malloc(size);
if(!p) abort();
return p;
}

こんな感じ?
0338デフォルトの名無しさんNGNG
>>329
たいした対処できないって言ってもメモリがありませんぐらいは言えるだろうから、
だまって落ちるよりはいいと思うぞ。
0339デフォルトの名無しさんNGNG
>>334
ネタですか?主観以外の何物でも無いと思うが。
0340デフォルトの名無しさんNGNG
>>334
分かりにくくてもいいなら全部一行で書けよ。
0341337NGNG
stddef.hも必要か・・・
0342デフォルトの名無しさんNGNG
>>334
大多数の人間の主観=客観
0343デフォルトの名無しさんNGNG
>>337
エラーメッセージくらいは......
まメモリ不足でメッセージ出力すらできないかもしんないけど
0344デフォルトの名無しさんNGNG
どう分りにくいわけ?
条件の中の副作用というのがダメなら
if (fgets(...) != NULL)
もダメだろ?

というか、そもそもfopen自体が副作用そのものだよな?
0345デフォルトの名無しさんNGNG
>>344
お、おまい
if (fgets(...) != NULL)
こんなことしてんのか?おもしろすぎ(W
0346デフォルトの名無しさんNGNG
君らは
while ((c = getchar() != EOF)
も「分りにくいけどしょうがないなあ…」
としぶしぶ書いてるわけ?
0347デフォルトの名無しさんNGNG
main関数にいる時にエラーメッセージを出力して終了する場合、
return fprintf(stderr,"エラーです。\n");
と書くのはアフォ?fprintfがint返すからこう書いているんだけど・・・
やっぱり1を返すべき?
0348デフォルトの名無しさんNGNG
>>346
わかりにくい。
実際におまいが間違えてる(w
0349デフォルトの名無しさんNGNG
>>345
え、EOFだとNULLが返るだろ?
(つか、それ以外にEOFの判別はできないはずだが)
0350252NGNG
結局 32 が何をしたかったのかわからなかった…
0351デフォルトの名無しさんNGNG
g_mallocの一部

p = (gpointer) malloc (size);
if (!p)
g_error ("could not allocate %ld bytes", size);

ちゃんとメッセージは返すらしい。

0352デフォルトの名無しさんNGNG
NULL = FALSE = '\0' = 0
故に
p=malloc(size)
if(!p) = if(p == FALSE) = if(p == '\0')
0353デフォルトの名無しさんNGNG
>>348
ははあ。
そんな我慢していやいや使うくらいなら
はじめからC使うなよ(w
0354デフォルトの名無しさんNGNG
>>353
間違っているのは確かだろ(笑)
0355デフォルトの名無しさんNGNG
>>353
便利だと思ってるし、好きだよ。
でも if まですることはない。
0356デフォルトの名無しさんNGNG
>>352
いや、まあ、それはそうだが。
だから何?
0357デフォルトの名無しさんNGNG
>>353
わかりにくいから細心の注意を払ってコーディングしなければ
おまいのような誤ちを犯すことになる
0358デフォルトの名無しさんNGNG
>>355
矛盾しまくってるジャン(w
0359デフォルトの名無しさんNGNG
>>345
だ〜か〜ら、もうネタはいいって言ってるだろうが!
0360デフォルトの名無しさんNGNG
>>356
オイオイ、FAQ嫁。
0361デフォルトの名無しさんNGNG
>>359
は?なんでオレなの?もしかしておまいも
if (fgets(...) != NULL)
とかしてんじゃねーだろーな?(w
0362デフォルトの名無しさんNGNG
>>357
意味不明
結局「しぶしぶ使う」わけ?
じゃあやめれば?
0363デフォルトの名無しさんNGNG
シンプル伊豆ベスト。

シンプルとは一行で書くことじゃない。
0364デフォルトの名無しさんNGNG
>>347は放置・・・問題外ってことか。
素直に
fprintf(stderr,"エラー\n");
return 1;
としよう。
0365デフォルトの名無しさんNGNG
>>361
貴方はどうするんでつか?
0366デフォルトの名無しさんNGNG
>>362
は?おまいは自分でわかりにくくないと主張しておきながら
間違えたんだろ?何?負け惜しみか?
0367デフォルトの名無しさんNGNG
>>365
if(fgets(...))でいいだろ。
0368デフォルトの名無しさんNGNG
>>365
if (fgets(...))
0369デフォルトの名無しさんNGNG
>>366
おまいは自分で分りにくいと主張しておきながら
whileでは使うんだろ?
まるきり矛盾じゃないか。
0370デフォルトの名無しさんNGNG
>>360
読みましたが何か?
0371デフォルトの名無しさんNGNG
>>369
わかりにくいから出来るだけ分けて書くようにする
それ以上のことは言ってないが?
0372デフォルトの名無しさんNGNG
>>371
ああ、しぶしぶ使うってことね。
了解。
0373デフォルトの名無しさんNGNG
>>369
便利だから・・・
0374デフォルトの名無しさんNGNG
以上、32以外は全部俺の書き込みですた。
0375デフォルトの名無しさんNGNG
>>367-368
冗談だろ(w

0376デフォルトの名無しさんNGNG
NULLやFALSEって0と見なしていいんですか?
0377デフォルトの名無しさんNGNG
>>375
ネタか?もう寝ろや
0378デフォルトの名無しさんNGNG
>>375
冗談じゃないが・・・
while(fgets(...))、for(...;fgets(...);...)もよく書く。
普通しないのか!?
0379デフォルトの名無しさんNGNG
>>373
便利だから使うっていうのは矛盾であることを否定したことにはならないのだが。
0380デフォルトの名無しさんNGNG
>>376
内部表現が0であるわけでも、値が等しいわけでもないが、
整数の0とポインタを比較するときは0はnull pointerとみなされる。
また、ifやwhileの条件ではnull pointerは偽となる。
0381デフォルトの名無しさんNGNG
>>376
だからFAQ嫁って。
0382デフォルトの名無しさんNGNG
ごめん、いままで#42の板が無いもんだとばかり思って新スレ立てかけたよ。
センスの無いスレ名だな。
0383デフォルトの名無しさんNGNG
>>367-368
ワラタ
おまえらちょっと何行かコード書いてみろよ。
fp,buf使ってファイル読み込んで内容を表示するコードをさ。
0384デフォルトの名無しさんNGNG
ifのやつは出すでしょう。
0385デフォルトの名無しさんNGNG
>>383
while ( fgets(buf, BUFLEN, fp) ) printf( "%s", buf );
0386デフォルトの名無しさんNGNG
ifやwhileの条件で「0以外は偽」「null pointer以外は偽」を
利用するのは、分りやすいとはいえない。
条件には、
・真偽値として使う変数
・比較演算子の結果
のみを使うのが分りやすい。
while (i--) なんてのは最低だ。
0387デフォルトの名無しさんNGNG
>>385
スッキリ見やすいですね。
0388デフォルトの名無しさんNGNG
for (i=BUFLEN; --i; )
0389デフォルトの名無しさんNGNG
>>386
>>ifやwhileの条件で「0以外は偽」「null pointer以外は偽」を
マジ頭大丈夫か?
0390デフォルトの名無しさんNGNG
真だろ。
0391デフォルトの名無しさんNGNG
>>386
おおむね賛成だが、論理式としては
・真偽値を返す関数
・!論理式
もありだろー。
0392デフォルトの名無しさんNGNG
>>389
うん。まちがえた。
0393デフォルトの名無しさんNGNG
>>381
何かあったらすぐFAQ読めって、お前はFAQの回し者か?
0394デフォルトの名無しさんNGNG
>>while (i--) なんてのは最低だ。
それをぱっと見て、例え仕様を知らなくても、なにが脱出条件なのか
すぐに見当がつかないような「あほ」がPGなんかやってるか?
0395デフォルトの名無しさんNGNG
>>385
うわ。()の内側に空白あけてることからも分る通り、
あまりにもDQNなコード...
0396デフォルトの名無しさんNGNG
while (fgets(buf, BUFLEN, fp)) printf("%s", buf);
0397デフォルトの名無しさんNGNG
>>394
わかりやすさの話をしてるんだが。
0398デフォルトの名無しさんNGNG
>>395
うわ。括弧を全角で書いていることからも分かる通り、
あまりにもDQNな奴...
0399デフォルトの名無しさんNGNG
>>397
十分わかりやすいぞ
0400デフォルトの名無しさんNGNG
>>394
自分で分かりにくいと思っているからそういうコメントになるわけだが。
やっぱり「なにが脱出条件なのか すぐに見当がつかないような」コードなんだね。
0401デフォルトの名無しさんNGNG
>>397
だから、それを「わかりにくい」と思うような人間が
PGなんかやってるのかよ・・・世も末だなオイ・・・
0402デフォルトの名無しさんNGNG
fgetsは「真か偽を返す関数」だよね?
0403デフォルトの名無しさんNGNG
>>395
ダメか?見易いと思うんだが。
てか Gtk+ のソース読んでたことあるから
染み付いちゃったんだよね
0404デフォルトの名無しさんNGNG
if (fgets(...))
がわかりやすいなら、同じ理屈で
if (!(fp = fopen(...)))
も分りやすいことになるね。
0405デフォルトの名無しさんNGNG
>>402
ポインタです。
0406デフォルトの名無しさんNGNG
>>405
ポインタも「真」または「偽」だよね?
0407デフォルトの名無しさんNGNG
fp = fopen(...);
if (!fp)
のほうがいい。
0408デフォルトの名無しさんNGNG
>>404
当然だ。
どっちもわかりやすい。
0409デフォルトの名無しさんNGNG
>>404
だからそれは2行に分けれるだろーが
頭悪過ぎ
0410デフォルトの名無しさんNGNG
>>407
きみは
result = fgets(...)
if (result)
と書くのかね。
0411デフォルトの名無しさんNGNG
>>410
ぜったいこいつアホだ
0412デフォルトの名無しさんNGNG
>>409
>>410 のように分けれるよ。
0413デフォルトの名無しさんNGNG
>>410
わざわざ変数をつかうことはない。
0414デフォルトの名無しさんNGNG
おい、おまえら。コーディングスタイルについて論争する糞スレは他にあるだろう。
わざわざここでするなよ。
0415デフォルトの名無しさんNGNG
>>409
矛盾が明らかになりました(激藁
0416デフォルトの名無しさんNGNG
>>414
>>1がむかつくからさっさと終了したいんです。
0417デフォルトの名無しさんNGNG
>>413
分りやすくなるなら、それくらいやるべきだろ。
もー矛盾しまくり。
0418デフォルトの名無しさんNGNG
さっきから屁理屈こねてるだけじゃん?何こいつら
二人いるみたいだが
0419デフォルトの名無しさんNGNG
>>418
あんたは何人いるの?
0420デフォルトの名無しさんNGNG
if(!(fp=fopen(...)))は括弧が多くてみづらいってことじゃないの?
0421デフォルトの名無しさんNGNG
>>420
そんな頭悪いレベルの話なの?
■ このスレッドは過去ログ倉庫に格納されています