by
Anonymous Coward
on 2011年01月31日 17時10分
(#1896060)
言語仕様と実装の問題をいっしょにするのはどうかと思いますが。 間違ったコードはちゃんとコンパイル時及び実行時にエラーとして叩き落とす実装(たとえばFail-Safe C [aist.go.jp])を使えばいいんじゃないでしょうか。Cの言語仕様はこのような実装を禁じていません。未定義とは文字通り「何をしてもいい」ので、コンパイルエラーや実行時エラーにしてもいいのです。 「そんなもん仕事では使わん」と言うなら、Pascalだって仕事で使うことなんかありませんし。むしろ(将来Cで仕事をさせる予定の人間に)過保護な高級言語ばかり使わせていると、間違ったコードはちゃんと言語がエラーにしてくれると思い込んでしまいませんか?
CはCでも・・・ (スコア:5, おもしろおかしい)
世の中はCでできている。WindowsだってLinuxだってアメンボだって、みんなみんなCでできている。
プログラミング言語だってCでできている。PythonだってRubyだってオケラだって、みんなCでできている友達なんだ。
アメンボとオケラのCは炭素では?
Re: (スコア:0)
Cの難易度が誇張されているように思うのだが。
Javaより難しい?
Re: (スコア:0)
間違ったコードが間違ったまま動くから、独習するのは難しいと思います。
Cだけ学ぶより、CPUやコンパイラをセットで学んだほうが楽だと思えるぐらい。
先日某所で char number[sizeof(int)]; というブットビコードを見かけました。
整数を一旦文字列にしようと思ったらしいですが、スタック壊しながら動いちゃいますから、初学者は何が悪いか気がつきませんよね。
Re:CはCでも・・・ (スコア:3, 参考になる)
言語仕様と実装の問題をいっしょにするのはどうかと思いますが。
間違ったコードはちゃんとコンパイル時及び実行時にエラーとして叩き落とす実装(たとえばFail-Safe C [aist.go.jp])を使えばいいんじゃないでしょうか。Cの言語仕様はこのような実装を禁じていません。未定義とは文字通り「何をしてもいい」ので、コンパイルエラーや実行時エラーにしてもいいのです。
「そんなもん仕事では使わん」と言うなら、Pascalだって仕事で使うことなんかありませんし。むしろ(将来Cで仕事をさせる予定の人間に)過保護な高級言語ばかり使わせていると、間違ったコードはちゃんと言語がエラーにしてくれると思い込んでしまいませんか?
Re: (スコア:0)
残念ながら、Cの仕様では、コンパイル時にすべての未定義コードを簡単には蹴ることができないんですよ。例えば、
a[i] = a[j]++;
は、実行時に、i==jだったら未定義になりますが、コンパイル時に、それを検出するのは容易ではありません。