素人の俺がC言語の質問に答えます

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
よろしければ
2デフォルトの名無しさん:05/02/01 01:32:21
C言語って強いですか?
3:05/02/01 01:58:33
>>2
もちろん
4デフォルトの名無しさん:05/02/01 02:02:23
どのくらいつよい?
5:05/02/01 02:08:43
>>4
言語界最強だと思います
6デフォルトの名無しさん:05/02/01 02:11:03
重複。

C言語なら俺に聞け! Part 101
http://pc5.2ch.net/test/read.cgi/tech/1107128274/
7デフォルトの名無しさん:05/02/01 03:42:11
ξうんこ
8デフォルトの名無しさん:05/02/01 07:16:01
void (* signal(int sig, void (*func)(int)))(int);

について、どんなことをするものか教えてください。
9デフォルトの名無しさん:05/02/01 11:26:57
>>8
見たまんまの関数ポインタですが何か?
10デフォルトの名無しさん:05/02/01 11:39:49
>>9
え、関数ポインタなのー? どこがー?
11デフォルトの名無しさん:05/02/01 18:22:29
>>8
要するに何か起きたときに呼ばれる関数を設定する関数だ。
http://www.microsoft.com/japan/developer/library/vccore/_crt_signal.htm

読み方がわからなければ
http://kmaebashi.com/programmer/pointer.html
12デフォルトの名無しさん:05/02/03 14:52:54
>>11
ttp://kmaebashi.com/programmer/pointer.html
ここの説明間違ってるし、書いた本人も分からないところを
適当にごまかしているみたいだから参考にしない方がいい。
13デフォルトの名無しさん:05/02/03 15:17:43
>>12
どこがどう違うのか教えてください
14デフォルトの名無しさん:05/02/03 16:05:27
================
Cの宣言の構文、とくに関数へのポインタを含む部分は酷評を受けることがある。
---K&R P.148
K&R P.148には以下のような記述がある。
int *f(); /* f: intへのポインタを返す関数 */

int (*pf)(); /* pf: intを返す関数へのポインタ */
は、この問題のいい例である。ここで * は前置演算子であり、 () より
低い優先度を持つから、正しい結合を行なわせるにはカッコが必要なのである。

ちなみに、上記の文には嘘がある。宣言の中の *, (), [] は演算子ではないし、
優先順位も、構文規則の中では演算子の優先順位とは別の箇所で定義されている。
================
補足:演算子の優先順位
Cには、数多くの演算子があり、しかもその優先順位が15段階もある。
これは、他言語と比べて極端に多いため、Cの参考書には、以下のような演算子の優先順位表がたいてい記載されている。
演算子 結合規則
() [] -> . 左から右
! ~ ++ -- + - * & (type) sizeof 右から左
* / % 左から右
この中で、優先順位が「最強」である ()について、
()は、プログラマが、文法で規定された優先順位を無視して 強制的に優先順位を設定する時に使用する括弧だ。
だから、 これの優先順位が最強なのは当然だ。
と考えている人は意外に多いが、それは 間違いである。もし、この ()がそのような意味なら、わざわざ優先順位表に載せる必要はないはずである。

この表の() は、(K&Rにもあるように)関数呼出しを意味する演算子であり、この場合の優先順位とは func(a, b) のような関数呼出しにおいて、func と (a, b) との間の結び付きの強さを表現している。
Cでは、「関数へのポインタ」という型があり、以下のような記述が可能なので、このような優先順位が必要なのである。
================
著者は分裂症
15デフォルトの名無しさん:05/02/03 16:20:26
>>14
それのどこがおかしいのか教えてくれ
16デフォルトの名無しさん:05/02/03 18:22:14
>>14
全然おかしくないよ。
17デフォルトの名無しさん:05/02/05 00:51:41
()って関数呼び出しだったのか
なるほど、言われてみれば納得がいく
なんか感動した
18デフォルトの名無しさん:05/02/06 01:38:09
operatorでオーバーロードできるもんな
19デフォルトの名無しさん:05/02/18 07:43:55
>>18
C言語もoperatorでオーバーロードできるように拡張されたか…
20デフォルトの名無しさん:05/02/18 07:56:34
正しくはキャスト演算子か関数呼び出し演算子かと。
21デフォルトの名無しさん:05/02/18 08:03:51
あっと、優先順位の一番上は関数呼び出し演算子だね。
22デフォルトの名無しさん:05/02/18 12:34:08
exitってどういう時に使うものなんですか
あとC言語にboolってありましたっけ
23デフォルトの名無しさん:05/02/18 13:52:48
>>22
>exit()
main()以外から明示的にOSに脱出したいとき。
>bool
C99なら stdbool.h そうでなくても作っておけばいい。
24デフォルトの名無しさん:05/02/18 15:43:36
なるほど

あとよくサンプルコードでfopen失敗したときに、よくexit(1)ってやってますけど
あれってreturn 0だと駄目なんですか
2524
解決しました
すみません