jijixi's diary - 修行が足りない……の? , 例外は… , FRISK LIQUIDS , Selector Namespace の話 , Selector Namespace の話その2 への返信だけど私も恥ずかしがり屋なのでトラックバックはしないことにして:
私もやっぱり int (*func)() のような例は知っているし、よく書くんだが、
int( b );
は、中途半端な関数宣言に見えてしまうのでエラーになると思っていた。
のである。
で:
char c; typedef char t; int (*alpha)(int i); // これが正しいのは知っている。よく書くし。 int (*(beta))(int i); // これも正しそう。見たことないけど。 int ((*gamma)(int i)); // コンパイルエラーかな。微妙。 int (*delta)((int i)); // コンパイルエラーだと思う。 int (*epsilon)(int c); // これは正しいし、alpha と同じ型だと思う。 int (*zeta)(int (c)); // c が型じゃないのでコンパイルエラーかな。 int (*eta )(int ((c))); // これも zeta と同じ理由でコンパイルエラーかな。 int (*theta)(int t); // これは正しいし、alpha と同じ型だと思う。 int (*iota)(int (t)); // これはコンパイルエラーだと思っていた。今は alpha と違う型になることを知っている。 int (*kappa)(int ((t))); // これはコンパイルエラーだと思う。
この辺りの括弧の有無がどう影響するのか、あるいはしないのかは、やっぱりわかっていない。
ちなみに、上記のコメントは私の予想で、実際にエラーになるかどうかとは関係がない。実際、間違っているものもある。
修行が足りない。
それと。
例外機構を持った言語で私が初めて触ったのは C++ なので、例外は「投げる」ものだと思っている。
投げる-補足する / 投げる-つかまえる のように、ペアで使うような気分なので、「挙げる」「上げる」にはほんのちょっと違和感を感じている。
C++ の throw が手を挙げる感覚だと、C++ の catch は、先生に指される感覚……のわけはないか。