C言語が難しい理由

最近Quoraでリクエストされた質問に回答したりしているのだけど、それなりの頻度で見かける質問に「C言語が難しいのはなぜですか?」みたいな質問があるように思えた(しかし、調べてみたところ実際にはそんなに何度も質問されているわけではなかった)。

 

 

C言語は言語仕様的にはそれなりに簡単なはずである。しかしC言語を第一線で使って戦えるようになるのは若い人には難しいと思う。なぜならC言語はここ30年くらいあまり変化がないから、30年間ずっとC言語をやってきたような達人と戦わないといけないからなのだ。比率的にニワカが少ないというそれだけで難易度が上がる。組み込みLinuxなんかだとC言語から直接システムコールを叩いたりしているコードがあり、C言語システムコールそれぞれに「xxしてはいけない」みたいなトラップがいっぱいあるが過去の互換性からその仕様を変更できずトラップがトラップのまま存在している。

 

 

文字列をコピーしたいと思って「C言語 文字列のコピー」で検索すると「strcpyを使えばいい」と書いてあるページがヒットする。でもstrcpyなんて今どき何も考えずに使うと完全アウトな関数である。「strcpyを使ってエラーになるVisual Studioではstrcpy_sを」とか書いてあったりするがVisual Studio以外でもstrcpy_sを使うべきなのである。しかしstrcpy_sはC11の仕様なのでそれより古いコードのメンテでは使うことができず、そしてそういうプロジェクトではstrcpyが危険だからという理由で自作の文字列コピー関数が使われているがそのドキュメントがなく結局実装を読まなければいけなかったりする。

 

 

そりゃPythonとかのほうが楽でしょ。