C の宣言文っておかしいですよね。
int hoge; で、int 型の hoge 文句の付けようもありません。
int *hoge; で、int 型の * ポインタ型の hoge 。 これもいいです。
int hoge[10]; で、int 型の hoge の配列 [10]。 なんですか? これ。 これなら、int[10] hoge; って書けるべきじゃないですか?
int[10] hoge; ならば、左から順番に、int 型の配列 [10] の hoge と読む事が出来ます。
int *hoge[10]; で、int 型 * ポインタ型の hoge の配列 [10]。 これだけなら100歩譲って良しとします。
int (*hoge)[10]; で、int 型の配列 [10] のポインタ hoge。 もう、なんなんですか? これ。 int 型の (*hoge) ポインタ型の hoge の配列 [10] の方が素直に読めると思うのですが。 絶対逆の方がいいです。
さらにこれを
int*[10] hoge; で、int 型の * ポインタ型の配列 [10] の hoge
int[10]* hoge; で、int 型の配列 [10] の * ポインタの hoge
と書けた方がスマートだと思うんです。
void (*hoge[10])(void); なんてもう、どこから手を付けていいのかもう分かりませんね。 これも
void(void)*[10] hoge; の方がエレガントですよね。
別に演算子の優先順位と結合規則を論じるつもりもありませんし、今更 C の変態構文について文句を付けるつもりもありませんが、時々ふと思うわけです。
なーーんでこんなん風にしちゃったんだろうと。
ちなみに以前スクリプト言語を作った事がありますが、その際はこのエレガントな宣言構文を持たせました。
おかげで、int*[10]* hoge; で、int 型のポインタ型の配列 [10] のポインタなーんて言う変態型を宣言できたりします。
さらに言うと私は
int hoge, foo, *baa, *piyo, fuge;
なんていう書き方は好きではありません。
やっぱり、頑固な年寄りはどこかひねくれているものなんですねぇ。 としみじみと思う今日この頃でした。
宣言文の歩き方
コメントはまだありません。