C言語なら、俺に聞け! <18>
■ このスレッドは過去ログ倉庫に格納されています
0001きょうはいいテンキーです。日下部陽一
NGNGいろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったら漏れに聞け。
だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。
・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマならこれを買っとけ。
・プログラミング言語C(K&Rと呼べば通だ)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/yfcbookshelf-22/250-3950205-1475419
K&Rで挫折するような救いがたいやつはこれでも読め
・作ってわかるCプログラミング(アヒル本と呼べば通だ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/249-4698746-2014711
推薦図書/必読書のためのスレッド PART3
http://pc.2ch.net/test/read.cgi/tech/1016722820/
・前スレ C言語なら、俺に聞け! <17>
http://pc.2ch.net/test/read.cgi/tech/1019372139/l50
0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNG並べてある順番に何か意図を感じる
0155デフォルトの名無しさん
NGNGんなもんgccと言いたいが、初心者に勧めるならOpen Watcomだな。
IDEついてるし。
0156デフォルトの名無しさん
NGNGWatcomはIDE&デバッガ搭載(おまけにFortran)
bccは日本語&解説サイトが豊富
どれもSJIS通る。
最適化ならWatcomに一日の長がある
VC.NETはSTLPortと最新のPlatformSDKがあれば、
フルスペックのウインドウズ開発環境として利用可能(総計1G弱落とす事になる)
.NETのManaged C++もいける。
0157初心者にもなってない
NGNGどの本がわかりやすいですか?
初心者にもなっていない人向けで、わかりやすいものがいいのですが。
オススメの参考書をおしえてください。
0158デフォルトの名無しさん
NGNG>>1のリンクに専用スレがあるよ。
0159デフォルトの名無しさん
NGNG名前欄読めよ…
0160デフォルトの名無しさん
NGNG読んだと思うよ(笑)
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNGvoidな関数において途中で処理を止めたいときは
・・ループで言うbreakみたいのは・・
return;でいいの?それともexit(NULL);使ったほうがいいの?
どうなの?
0163デフォルトの名無しさん
NGNGおーい、exitしたらプログラムが終了してしまうぞー
それとexitの引数はint型。
return;が正解。
0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG0166162
NGNG0167デフォルトの名無しさん
NGNGmainも関数。
returnを使う。exitでもいいけど。
0168デフォルトの名無しさん
NGNGabort() しとけ。
0169デフォルトの名無しさん
NGNG今それ書こうとした・・・
0170デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNGexit()の引数がint型なんだからしかたない。
0173デフォルトの名無しさん
NGNGどこで呼ぼうとかまわない。
returnは手続きで、exitは関数
0175デフォルトの名無しさん
NGNG分かっていると思うけど、voidとNULLは違うから。
NULLを渡すということは0を渡すことと同じ。
0176デフォルトの名無しさん
NGNGそれまではvoidの代わりになんて書いていたのですか?
void型の関数とかvoid *とか。
0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNGvoid *みたいなのはchar *で代用してた。
0179デフォルトの名無しさん
NGNGありがとうございます。
enumみたいに以前からあったんですか。
> void *みたいなのはchar *で代用してた。
なるほど。キャストすればchar *もint *とかになるからね。
0180デフォルトの名無しさん
NGNGバカ。NULL を必要とするところに NULL 渡すことと 0 を渡すことは同じだけ
ど、int が要求されているところに NULL を渡すことと 0 を渡すことは同じで
ないことがあるぞ。
0181デフォルトの名無しさん
NGNGん?NULLって
#define NULL 0
か
#define NULL (void *)0
じゃないの?
0182デフォルトの名無しさん
NGNG180が言いたいのはたぶん、ポインタとして「0」と書くとnull pointerを表す
約束になっているのでオーケーだが、逆にポインタを整数に変換して特定の値
(例えばゼロ)になるという保証はない、ということだろう。
0183デフォルトの名無しさん
NGNGそうか・・・・
まあ>>175で言いたかったのはNULLはvoidと違って値のあるものだということだから。
0184180
NGNG>>183
NULL は void と違ってって、あんた exit() に float 渡しても平気 ?
それぐらい変なことだよ。exit(NULL) って。
0185デフォルトの名無しさん
NGNGだーかーらー
あの人はNULLとvoidを混同しているようだから言ったんだってば!
exitにfloat?NULL?そんなもん渡すか!
0186デフォルトの名無しさん
NGNGつーか>>1のリンクくらい嫁。
0187デフォルトの名無しさん
NGNG> NULLを渡すということは0を渡すことと同じ。
先ずは、この発言撤回しろよ。
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNGワラタ
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNG0193manko chinko
NGNG#include <stdio.h>
main(){printf("manko daisuki");}
0194デフォルトの名無しさん
NGNG数値を期待するところにNULLを渡せばそれは0を渡したのと同じことになる。
コンパイラによってはNULLを汎用ポインタ型の0として明示的に定義してる場合もあるが
これはよけいなお世話とも言うべきで、ANSIでいうところのヌルを表す数値定数は0で
あって、それ以外の何者でもない。
実装によってはヌルポインタのビットパターンが0じゃないものもあるが、
それはコンパイラが0から正規のヌルポインタに翻訳する。
sizeof(NULL)がsizeof(0)と等しくない環境は多い。
可変長引数やプロトタイプ宣言されていない関数への引数としてヌルポインタを
渡したい場合は、明示的にポインタ型へのキャストを行う必要がある。
結論としてだね、引数を含んだプロトタイプ宣言がなされているであろう関数
exit()に引数としてNULLを渡すのは合法で、結果として0を渡したのと同じことになる。
型検査が行われて、ポインタ型を整数引数に渡したとかいう警告がでるかもしれんが。
0195デフォルトの名無しさん
NGNGって、ゼロになる保証がないだけだから
mainがvoidの時は、それほど影響はないかと
と言っても、たまに勘違いしてる人がいるから問題と言えば問題だけど…
0196デフォルトの名無しさん
NGNGヌルポインタと整数の0は別物であって、
そのどちらかをコードに書く場合、ポインタを期待するところにはNULLを
整数を期待するところには0を書くべきである。
memsetの第三引数に渡す数値も同じ。
exitに渡す数値も同じ。
exitの場合、明示的にEXIT_SUCCESS, EXIT_FAILUREが定義されているので
それを使う方が好ましいとはいえる。
0197デフォルトの名無しさん
NGNGそれはC++の話であって、Cだとその限りではない
0198デフォルトの名無しさん
NGNGCだって同じだよ。
つーか、C++がCのヌルポインタを引き継いだだけだ。
意味は変わっていない。
0199デフォルトの名無しさん
NGNG0200玉三郎
NGNG俺の出番か
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG先生出番です
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNGC でも C++ でもいいから、
> 数値を期待するところにNULLを渡せばそれは0を渡したのと同じことになる。
が常に正しいことの根拠を示せよ、バカ。
0205玉三郎
NGNG0206デフォルトの名無しさん
NGNGif (p) {
} else {
}
でpは常に偽だけど、定数NULLが0とは限らないっていうんじゃないのか?
0207デフォルトの名無しさん
NGNGネタニマジレスカコワルイ…
0208デフォルトの名無しさん
NGNG0209困っています
NGNG0210デフォルトの名無しさん
NGNGNULLは0です。
というより、0をわかりやすいようにNULLにしてるだけ。
FAQ読むよろし。
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNGどうぞ。
http://www.google.com/search?hl=ja&q=C%8C%BE%8C%EA+%95W%8F%80%83%89%83C%83u%83%89%83%8A%88%EA%97%97&lr=lang_ja
0215デフォルトの名無しさん
NGNG0216210
NGNG俺はちょっとスレ見たらNULL!=0とか書いてるバカがいたから書いただけ。
NULL!=0と#defineすることは可能だよ、別に。
そんな処理系も(そんなことしてるやつすら)みたことないけど。
0217デフォルトの名無しさん
NGNGやってみますた
0219デフォルトの名無しさん
NGNG0220!206
NGNGそれは逆
定数の0がポインタとして比較される時にNULLになる事が保証されているので、
time(0);
は
time(NULL);
になる事が保証されているが
exit(NULL);
が
exit(0);
になる事は保証されていない
0221デフォルトの名無しさん
NGNG#タイーホ >>217
#endif
0222180
NGNGあのね。C++ なら、#define NULL 0 って定義されてていいの。
問題はそうじゃなくて、
void *p = 0;
int n = (int)p;
って、やった時に n が 0 になるかどうかが問題なんだよ。
やっぱりわかってなかったか...。
0223デフォルトの名無しさん
NGNG定数の0がポインタとして評価されるときに”ナルポインタに”評価されることが保証されてるだけでしょ。
定数NULLがこの0と同様に振舞うならば、仕様の範囲でとりうる値は0くらいしかないと思うけど。
0224デフォルトの名無しさん
NGNG180のどこにそんなことが書かれているのか子一時間(以下略
0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNGNULLはポインタだから
eixt((void *)0);
になって、それが暗黙的に整数に変換された時に0を示すとは限らない
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNGナル萌え派の勢力はどうなんだ?
0229180
NGNGバカはでてくんなよ。int n = (int)p; と
> int が要求されているところに NULL を渡すこと
の関連ぐらいはわからんか ? まあ、わかんねーから書いてんだろうけど。
0230デフォルトの名無しさん
NGNGコンパイラが扱うヌルポインタとNULLは別物。
NULLはヌルポインタに変換されることが保証された定数値のdefineにすぎない。
#undefして再定義したとしても、それがヌルポインタに自動変換される値で有れば
規格外だが合法。
問題はヌルポインタを整数型に変換した場合の動作であって、
NULLが0と交換可能かどうかではない、というわけだね。
0231194-196
NGNG0232デフォルトの名無しさん
NGNG#define NULL ((void*) 0)
の場合は「定数値のdefine」ではないね
0233デフォルトの名無しさん
NGNG型が違うだけで定数値でしょ
0234デフォルトの名無しさん
NGNGexit(NULL);
とするのが、常識的なのかってことじゃないの?
0235デフォルトの名無しさん
NGNG俺は異常だと思う。
ところでintを引数にとるはずのexitでexit(NULL)の記述が出来ることが問題になる処理系では、
NULLは
#define NULL ((void*)0)
じゃなくて
#define NULL 0
とされているとみてかまわないのでは?
0236180
NGNG>>195-196 は、別に降参せんでもいいと思うが。
>>230
マッ、そう言うこっちゃ。大体、C++ にした時に Null とか言う定数を定義しち
まえば良かったのに、#define NULL 0 なんかでごまかそうとするからこんなこ
とになるんだよ。この点については Pascal がうらやましいよ。
>>207
ネタの割には、しつこいんだが。
0237デフォルトの名無しさん
NGNGで表されていれば話が簡単だったのにね。
0238デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNG/::\_____\
|: ̄\∩`_´) \ 終わった?
|: :| ̄ ̄U ̄:|
0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNGNULLを0とみなせるとは限らない。
0244180
NGNG議論するまでもないと思うが...。
>>238
C++ なら、それで OK。C なら、やっぱ ((void *)0) でしょ。
>>239
細けぇとこに突っ込むなよ。小姑みたいだぞ。
0245デフォルトの名無しさん
NGNGexit(NULL);だよね?
この状態ではNULLはintに暗黙に変換できなきゃ値の問題以前にコンパイルすら出来ないはず。
0246デフォルトの名無しさん
NGNG0がヌルポインタとして見なされるのは
ポインタが記述されるべきところに記述された場合のみ。
0247デフォルトの名無しさん
NGNG|: ̄\ \★パタン
|: :| ̄ ̄ ̄ ̄:|
0248デフォルトの名無しさん
NGNGおいでよ、一緒に遊ぼうよ。
0249デフォルトの名無しさん
NGNG|: ̄\ \
|: :| ̄ ̄ ̄ ̄:| < 全然わからんもん
0250デフォルトの名無しさん
NGNGとりあえず適当なこと言えば親切な人が突っ込んでくれるから。
さ、出ておいで〜
0251デフォルトの名無しさん
NGNGff | }!、,、〃 / ″いやあぁぁぁぁぁ!!
,リ/ .ノ*´jコ`)'〃
{{ { ′ v' 《
ヾ.\. \ヾ
_,,二、》 ; \. 三,_
(( ゙ー=、`″〃 \. \-‐' ,))
゙ー=″ ゙' 一'
0252デフォルトの名無しさん
NGNGキャストで大きさは変わっても、bitの並びが変わることはないだろ?
■ このスレッドは過去ログ倉庫に格納されています