【Quoraの質問と回答から引用】
Cは高級言語にしては珍しく、ハードウェアを直接触れるからです。例えばソフトウェアでハードウェアを操作するときには、特定のアドレスに命令を表す特定のデータを書き込むと言う操作をします。これがソフトとハードの境目なのですが、多くの高級言語では「開発者にハードウェアを意識させないのが良い」という思想なので、ハードウェアのアドレスを指定できないようになっています。
ところがCの場合はポインタ変数を使って任意のアドレスに直接書き込めるのです。この機能を使わなければハードウェアが操作できないので、他の言語では実装できないのです。
一応これはC++でもできます。しかしC++が使える組み込みエンジニアは多くありません。
それは組み込み系のエンジニアはもともとはハード屋さん出身の人も多く、ソフトウェアの知識は限定的なことが多いからです。
特にオブジェクト指向やらデザインパターンやらのソフトウェア工学の話は何回聞いてもさっぱりという組み込みエンジニアは多く、そのような技法を現場に持ち込むと黒船扱いされます。
私はそのようなハード屋に近いプログラマーと仕事をしたことがありますが、継承とかポリモーフィズムのような実際のハードウェアの動きをソフト的に抽象化されるとさっぱり理解できないようでした。
なるほど。C++ができる組み込みエンジニアはすくないのか?
じゃあ、C++で組み込み系もやろうか。