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

C言語なら、俺に聞け! <18>

■ このスレッドは過去ログ倉庫に格納されています
0001きょうはいいテンキーです。日下部陽一NGNG
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのは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
0322318NGNG
おっと、返しているのはメンバーか。
0323デフォルトの名無しさんNGNG
int (const char*);をtypedefしてしまう、とかね。
0324デフォルトの名無しさんNGNG
>>321
それなら同意だが。
ユーザーが勝手に定義し直しても・・・ってことだとオモタヨ
0325デフォルトの名無しさんNGNG
むかしC++にnilって予約語無かったっけ?
何で消えたんだろ?
0326ふかNGNG
レスあり〜。
あれ?プロトタイプに引数名は書いた方がいいのか。
今,標準ライブラリヘッダもみたけど,たしかにそうだった・・・。
んじゃ,引数名書かないことの意義は?

あと話をまとめると
・動かない処理系がある
・書かないとコンパイラではint型と認識する
・漏れが >>294 で書いたアーカイブ間で相互参照するときに,
宣言しとかないとリンクできない
くらいですかね?
0327デフォルトの名無しさんNGNG
>>326
コンパイラはプロトタイプからは引数の型しか見ないから書いても書かなくてもよい。
でも書いた方が人間には優しい。
0328デフォルトの名無しさんNGNG
あの〜、nil=不明は良いんですけど、nulはどんなビットパターンにアサインされるんですか?
ポインタという整数型にnilという状態を持たせたら、そのビットパターンは整数値として有効な範囲に
いる可能性が出てきますよね?
0329デフォルトの名無しさんNGNG
>>326
stdlib.hをインクルードしないで、
char *str;
str=(char *)malloc(478);
とかやってみな。
0330デフォルトの名無しさんNGNG
>>326
変数名が不適切なときの修正が楽。
0331デフォルトの名無しさんNGNG
>>320
>299
>ハードウェアで bitパターンが all 0 でない物がNULLポインタである可能性があるんだから

って言ってるじゃん。
0332デフォルトの名無しさんNGNG
>>326
ファイルサイズをほんの少し小さくできる。
0333315NGNG
>>317=324
>>298=321とは別人だけど、321と同じようにとった
つうか、>>306の処理系云々と言うのは普通そうとると思うけど、
ユーザーが書きかえると思う人の方が多いの?
0334デフォルトの名無しさんNGNG
>>326
一宣言一行に収まって見た目が美しい。

…ってメリットにはならんな。
0335デフォルトの名無しさんNGNG
>>328
ポインタは整数型じゃないけど?
0336デフォルトの名無しさんNGNG
>>328
> ポインタという整数型に
ってのがちょっと意味不明なんだけど、
ポインタという名前の整数型の変数に?
0337デフォルトの名無しさんNGNG
>>331

>ビットパターン 0 が null pointer だって教え方がまず間違ってるよ

>>299は
「ビットパターン 0 以外のものが null pointerである可能性がある」
としか読めないが?
0338デフォルトの名無しさんNGNG
おいお前ら!
プロトタイプ宣言はきちんと書いていますか?
0339デフォルトの名無しさんNGNG
>>338
必要ならやります(というかやらざるを得ない)が、何か?
0340デフォルトの名無しさんNGNG
書かないでcprotoに任せる
0341デフォルトの名無しさんNGNG
>>312
http://www.inet-lab.org/ted/program/prog064.html#064.6
によると、
int (* search_command(char* buf))(const char*);
int (* search_command(char* buf))(const char*)
{
return cmd_list[0].func;
}
らしい。なんか奇妙な感じ。
0342ふかNGNG
>>329
。。。動きましたけど・・・(漏れも動くとはおもわなんだ)



#include <stdio.h>

int main(){
#define AL_SIZ (478)
char *str = NULL;
str=(char *)malloc(AL_SIZ);
if( !str ){
printf("alloc error\n");
return(0);
}
memset(str,0x00,AL_SIZ);
strcpy(str,"hoge hoge hoge\n");
printf("%s",str);
free(str);
return(0);
}
0343デフォルトの名無しさんNGNG
700行以上もあるmain関数は異常だとおもいますが。
0344デフォルトの名無しさんNGNG
>>338
必要無くてもやる
0345312NGNG
>>319>>323thanks
あとで試してみるよ!!
0346ふかNGNG
>>340
なんですか,それ?
0347デフォルトの名無しさんNGNG
>>342
そりゃ動くだろ。
でもコンパイラに文句言われなかったか?
ものによっては言われないのかな。
0348デフォルトの名無しさんNGNG
>>343
そのくらいは普通
0349デフォルトの名無しさんNGNG
>>346
検索しろよ。
ところで、みんな本気で書いてるのか?
機械出力させるのが自然だと思ってたんだが。
0350312NGNG
>>341激しくthanks!!
0351デフォルトの名無しさんNGNG
ハードウエアにnull pointerっていう概念…
高級言語マシンなら…

たしかWirthが作ったModula-2マシンのLilithや
Lispマシンにはあったはずだ。

今だと「dereferenceしたらトラップがかかるポインタ」っていう
くらいかな。0番地のページに保護をかけることができれば0で良い。
0352デフォルトの名無しさんNGNG
>>348
俺は200行でも以上だと思いますが。
0353デフォルトの名無しさんNGNG
>>349
関数をつくるたびにヘッダーファイルにコピペしてセミコロンをつけるだけじゃん。
0354ふかNGNG
>>347
ワーニソグもなしでした。
尤も最近のC言語コンパイラは
//コメント
とか
処理の後の変数宣言までワーニングなしで通しちゃいますからねぇ・・・
0355デフォルトの名無しさんNGNG
>>341
それで合ってるけど、猿にもわかるようにtypedefするのが親切ってもんでしょ。
0356デフォルトの名無しさんNGNG
>>341
激しく可読性が落ちないかな?
0357341NGNG
>>355-356
もちろん、typedef推奨。
オレも知らなかったので、調べただけだよぅ。
0358デフォルトの名無しさんNGNG
おっうちは Call to function 'malloc' with no prototype と出た。
0359デフォルトの名無しさんNGNG
人間が書いたプロトタイプが本体や呼び出しと食い違ってないか
を機械にチェックさせるとミスが減るけど、

機械が本体から作ったプロトタイプだとチェックにならない。
0360デフォルトの名無しさんNGNG
>>356
コメントつければ大丈夫だYO!
0361デフォルトの名無しさんNGNG
>>359
それは勘違いでは?
プロトタイプチェックしてほしいのは、その関数を使う人で、
関数を書く人にとっては自動でもいいような。
0362デフォルトの名無しさんNGNG
スレと関係ないんだけど。
うどんが一玉あるんだけど、具になりそうなものは何も無いんだ。
(卵はあるけど月見うどん嫌い)
かけうどんざるうどん、どっちにするのがいいと思う?
0363デフォルトの名無しさんNGNG
>>362
ざるうどんNULLポインタ添え
0364デフォルトの名無しさんNGNG
>>362
具無し焼きうどん
0365デフォルトの名無しさんNGNG
>>363
NULLの中身は0ですか?1ですか?
私は1の方がおいしいと思いますよ
0366デフォルトの名無しさんNGNG
>>365
-4
0367デフォルトの名無しさんNGNG
チェ━( ´∀`)・ω・) ゚Д゚)・∀・) ̄ー ̄)´_ゝ`)━ンジ!!!

話題がうどんにシフト! (一時的)
0368デフォルトの名無しさんNGNG
>>364
それ食べたことあるYO!
おいしかったYO!
スレ違いスマソ  YO!
0369デフォルトの名無しさんNGNG
>>361
お、なるほど。
「本体書いた後へッダにコピペする」時のミスが減るかもね。

しかし、「呼び出し仕様が先に決まってる」って方が良くあるんじゃ?
0370ふかNGNG
ちゃんと仕様確定してからゆでてくださいね
0371デフォルトの名無しさんNGNG
ぶび厨はいいよな。NULLポインタ論争に巻き込まれなくて。
0372デフォルトの名無しさんNGNG
いい あいであ がでねぇええ
誰か〜
0373デフォルトの名無しさんNGNG
焼きうどん好きくないからざるうどんにするよ。
うらやましいだろ。(´ー`)うどんマンセー・・・。
世界で最もうまい食べ物は
1.豆腐
2.うどん
3.おでん
だな。
0374デフォルトの名無しさんNGNG
>>373
ハヤシライス様が抜けてるぞ。ワーストの話か?
0375デフォルトの名無しさんNGNG
堅焼きうどんは好きだけどなー
0376デフォルトの名無しさんNGNG
世界でもっともうまい食べ物は
1わさび
2鷹の爪
3故障
だな。
0377デフォルトの名無しさんNGNG
void kansudesuyo(char mojiretsunano[])
これ嫌い。

void kansudesuyo(char mojiretsunano *)
と書いて。
0378udon.cNGNG
>>362
#include <stdio.h>

int main() {
    srand(time());
    if (rand()%2) {
        puts("ざる");
    } else {
        puts("かけ");
    }
    return 0;
}

2回以上やると、やっぱり迷ってしまう罠。
0379デフォルトの名無しさんNGNG
>>378
timeの実引数が足りません。
0380デフォルトの名無しさんNGNG
char *mojiretsunanoだよ(汗
0381デフォルトの名無しさんNGNG
>>360
その考えたかやめれ。修羅場で修正したらどうせコメントなんか修正しないんだ
から。typedef 推奨だ。

extern int usbmon_quit (const char* s);

typedef int (*CmdFunc)(const char *);

typedef struct {
 CmdFunc func;
} CmdList;

static const CmdList cmd_list[] = {
 { usbmon_quit },
};

static CmdFunc search_command(char * buff)
{
 return cmd_list[0].func;
}
0382デフォルトの名無しさんNGNG
#include <time.h>
#include <stdlib.h>
もしときましょう。
0383ふかNGNG
ども,ありがとうございました。
多分今の環境には馴染まないので,出力ツールは使わないとはおもいますが,
そういうものがあるというのもまた勉強になったYO!
そいでは漏れはiStudyの続きをば・・・
0384378NGNG
>>379
うい。soba.c を作る時に直します。
0385デフォルトの名無しさんNGNG
>>377
やだもん
0386デフォルトの名無しさんNGNG
朝までC談義

寝るなよおめーら
0387デフォルトの名無しさんNGNG
>>378
#include <stdlib.h>
#include <time.h>
#include <noodle.h>
も入れとけゴルァ!!

あ、最後のは>>378のコードだと必要ないか。
0388デフォルトの名無しさんNGNG
>>378
かけが出てしまった・・・
0389デフォルトの名無しさんNGNG
やっぱりsrandの引数にはtimeの戻り値を与えるのが一般的なのね。
Linuxとかならgetpidでも良さそうだけど。
0390387NGNG
>>387は遅すぎると自分を小一時間問い詰めて来ます
0391デフォルトの名無しさんNGNG
>>388
つぅか海苔のあるなしでは?
0392378NGNG
>>387
うい。libnoodle を作る時に修正しときます。
0393デフォルトの名無しさんNGNG
>>391
それはもりそばとざるそばのことだYO!
かけうどんは揚げ玉のないたぬきうどんだYO!
0394372NGNG
画面の前の神様
どうか生霊となって私めに降臨ください・・・(´人`)ナム-
0395デフォルトの名無しさんNGNG
>>391
違うだろ。それを言うなら、ざるともりだ。
ちゃんと仕様書嫁。
0396デフォルトの名無しさんNGNG
>>389
/dev/random を読むダロー
0397デフォルトの名無しさんNGNG
>>395
ざるに海苔があるかどうかは処理系依存ってかいてあるけど・・・
0398デフォルトの名無しさんNGNG
   ||
   || スルスル
   ||
   ||
 ∧||∧
(  ⌒ ヽ 
 ∪  ノ >>394 神です・・・
  ∪∪
0399デフォルトの名無しさんNGNG
何かC使いって堅苦しいよね。うーん。
0400395NGNG
>>397
すまん、「ざるうどん」は定義されてるが、
「もりうどん」があるかどうかは、処理系依存だった。
0401デフォルトの名無しさんNGNG
すみません。

typedef たぬき きつねそば

と

typedef きつねそば たぬき

はどちらがANSIですか?
0402デフォルトの名無しさんNGNG
今このスレには何人いるのか聞いてみるテスト。
0403デフォルトの名無しさんNGNG
Cプログラミング診●室のおっさんが変数名はできるだけ長くしろって言っているけど、いいの?
0404デフォルトの名無しさんNGNG
>>399
そう思ったらおまえもC++へ以降だ。
0405デフォルトの名無しさんNGNG
>>402
488人
0406デフォルトの名無しさんNGNG
>>393
処理系によって「たぬきうどん」は別物
0407デフォルトの名無しさんNGNG
   ∧∧
 ヾ(゚∀゚)ノ >>399 C使いはたいがい別の言語もやってるから
  (  ) )) そういう判断はできないYO
(( < <
0408デフォルトの名無しさんNGNG
NULLのビットパターンは0で無いかもしれないとか
ポインタを整数にしたら戻せないかもしれないとか
プロトタイプを書かないと動かないかもしれないとか
悩まなくて良かった昔が懐かしい。

もー決めちゃったらどうかな?
「NULLは0」
「ポインタはlongと同じサイズ」
「プロトタイプ書かなくてもコンパイラは困らないが
書かないとエラー」
「charは符号付き」
0409372NGNG
>>398
キタ━━(。A。)━━ァ!
首吊ったいつもの神様が後輪されたァッ!!
今夜は逝けそうだ!
0410デフォルトの名無しさんNGNG
>>404
教えてくれますか?

女性プログラマに優しく教えてほしいよ
0411デフォルトの名無しさんNGNG
>>403
他人に迷惑をかけない程度なら良いんでない?
0412デフォルトの名無しさんNGNG
>>408
C2002とか?
0413デフォルトの名無しさんNGNG
関西と関東ではたぬきときつねが逆転するという噂を聞いて、
京都に行ったときにたぬきうどんをたのんだら
あんかけ生姜乗りきつねうどんが来た。
(当時はあんかけも生姜も苦手だった。)
普通にきつねうどんを頼んだ友達は
普通のきつねうどんをうまそうに食ってた。
0414デフォルトの名無しさんNGNG
   ||
   ||
   ||
 ∧||∧
(  ⌒ ヽ  >>409 あれ、また君ですか・・・?
 ∪  ノ  どっかのスレの500・・・
  ∪∪
0415デフォルトの名無しさんNGNG
>>411
そっか。。
なんかあのおっさんむかつくよ!
fileをfと略すなとか。じゃあ標準ライブラリのfopen(以下略
0416デフォルトの名無しさんNGNG
>>413
ということはたぬき==揚げ玉は処理系依存か。
0417415NGNG
柴田ぼーよーやPerlをべたぼめだし。もう信じらんない。
0418デフォルトの名無しさんNGNG
>>413
Asian Noodle Standard for Information によると、
残念ながら地方依存です。
0419デフォルトの名無しさんNGNG
>>414 おお、スレを超えた再開か!?
0420デフォルトの名無しさんNGNG
>>418
ワラタ。ANSIか。
0421312NGNG
>>381でgcc -Wall無警告でコンパイル出来たYo!
おりごとう!!
■ このスレッドは過去ログ倉庫に格納されています