C言語 変数の宣言位置 2
2006 年 4 月 25 日
| カテゴリー: プログラム
変数宣言の位置でエラーでてるんじゃないと某先生に教わったお話の続き。
krbせんせーがオーストリアから帰ってきたのでこの話をしてみる。
「バカじゃない?」って返ってくると思ったらそれ以上のが返ってきたw
一緒にいた神A氏も含めて、「他のとこでそんな話しないでよ恥ずかしいから」「それはリテラシレベルでしょ」「生暖かい話を聞けた」とかそこまでネタ伝説化しなくてもw
まあ最初に変数を宣言してメモリに展開して~ってのを考えたらそれが普通なのは納得しますが、そういうのはコンパイラ側にやってほしいなあというのが自分の感想でして。C++ や Java は実際できるわけですが。
当然の如くこのあたりの話はガーベッジコレクタとかの話に流れるわけですがそれは置いといて。
大抵の場合はブロックの最初で宣言するだろうからそうそう問題はないと思うけれど、for文の条件で宣言ができない以上、せめて直前で宣言してやりたいと思うわけですよ。
そんなわけでしつこく、某大学の先生にまで聞いてみたらこんな代替案。
double trapezoid(double (*g)(double), double a, double b, int n) {
double s = 0.0;
double h = (b-a)/n;
s += (g(a)+g(b))*h/2.0;
{
int i;
for(i=1; i<n; i++) {
s += g(a+i*h)*h;
}
}
return s;
}
ああ、その手がありましたかw
ちなみに gcc は C99 でコンパイルしてましたか。


自分もC言語で変数宣言の位置でよくエラー起こします。考え方のデフォルトがJava(オブジェクト指向言語)だと、どんな変数も頭で宣言しないといけないなんて、ナンセンスだとしか考えられない。
まぁそんな事言ってもCコンパイラさんは納得してくれないわけで(泣
コンパイラさんがどんな風に解析してるかを考えたら、いろんなとこで宣言できたりするほうが気持ち悪かったりするんでしょうねー
ちなみにここ最近、こんな素人発言ばかりしてるので周りの評価が激変中な気がいたします(ぇ
たまに『オブジェクト指向で考えられない』っていうのを見ますけど、『オブジェクト指向じゃないと考えられない』ですよ。クラスがないだけでもかなり戸惑ってしまいます。。