組み込みとC言語

なぜ組み込みでは今でもC言語を使うのか?

C, C++, C#, Ruby, ActionScript, Java, Swift, Objective-C…いまの世の中にはソフトウェアを開発するためのプログラミング言語が色々と存在しています。

例えばみなさんが持っているスマートフォン。数千、いえ数万のアプリケーションがリリースされていて、インターネットにさえつながっていればいつでもどこでもダウンロードできる。そしてその場で便利な機能が使えてしまう!少し昔の世の中では考えもつきませんでした。 ところで、そのスマートフォンアプリのシステム。どんなプログラミング言語で開発されているか、ご存知ですか?

40年の歴史を持つプログラミング言語「C言語」

AndroidアプリはJava、iPhoneのアプリはSwiftまたはObjective-Cというプログラミング言語が使用されています。この言語、私はコーディングしたことがありません。私のような組み込みソフトウェア開発のエンジニアは、このような高級言語はあまり使う傾向に無いのです。

組み込みで使用する開発言語と言えばC言語。やはりC言語が一番多いです。おそらく世界のどこでも、組み込みのソフトウェア開発に使う言語と言えばC言語に尽きると思います。

古くは1972年頃、UNIXの開発から生まれたC言語。もう40年以上の歴史のある古い言語です。そもそもC言語の'C'とは何でしょう?C言語ってことは、A言語とかB言語とかあるの?と思う方もいるかと思います。C言語はB言語の次に作成されたから「C言語」となり、'C'自体には特に意味がありません。B言語の元とされたものはBCPL、その元となったのはCPL……はい、A言語は存在しません。また、近年ではD言語というものも開発が進んでいるそうです。

その後、K&Rと呼ばれるものや、ANSI、ISOなどで標準化が進み、最終的に1999年に現在一般的に使用されている「C99」と呼ばれている標準規格となりました。(※規格の改訂はその後も行われています)

富士ソフトのエンジニアに聞く「今でもC言語」なワケ

ではなぜ40年以上前に開発された言語が、今でも組み込み開発の世界で使われ続けているのでしょうか。
組み込み開発の得意とする富士ソフトでプログラミングを担当するソフトウェアエンジニアに聞いてみました。

<鋭い眼差しでソースコードを記述するエキスパートエンジニアが解説!>

「C言語は、アセンブラレベルと同等の処理を簡潔に記述でき、またJavaなどに代表される他の高級言語にあるような暗黙のコード生成やバックグラウンドで動く処理が無い。プログラマが意図したコードだけがコンパイラで生成されるため、実行ファイルが肥大化してしまうことも無く生成コードに無駄がなくコンパクト、かつ処理速度も高速である。そのため、特にハードウェアを操作するファームウェアや、スループットを保証する必要があるリアルタイム処理、プログラムサイズをコンパクトに収める必要がある小型MCUのソフトウェア開発に向いている。だからと言って、C言語は組み込みだけに特化している訳ではなく、GUIや複雑な上位アプリケーションの実装も可能。オールラウンドで使用可能な言語がC言語なのである。

歴史が長いため、C言語で記述された既存資産が多く、今、組み込み系のOSで主流となっているLinuxもほぼC言語で設計されている点も理由に挙げられる。また、ANSI/ISOで標準化されているため、開発環境など多くのベンダーがサポートしており、互換性がとれるところも広く使われる理由と考えられる。」

<要するに、これが理由っ!>

その① コードが軽いので、資源が少ない環境や、制御などにリアルタイム性が要求される組み込みに最適な言語!
その② 開発資産や主流のソフトウェアがC言語でできている!

 

やはり長年の歴史をベースとして普及してきていて、エンジニアの手足のように思い通りに動作するC言語。しかも、世界中でC言語を扱うエンジニアが他の言語に乗り換えるには、多くの時間とコストが必要とされるでしょう。組み込み開発でも、他の言語に乗り換えるには大きな壁が存在するように思えます。

C言語に学ぶ“業界”の奥深さ

C言語を学びはじめると、入門として「まずはmain関数を作りましょう!関数の形は『型名 関数名(引数){処理}』と言う構造です。これをコンパイルするとプログラムができます!」みたいな流れで進んで行きます。 これから組み込みで使用されるC言語を学ぼうと考えている方は、他にもMUC/CPU/GPU/FPGA/DSPなど様々なデバイスを深く理解し、I2C/UART/USB/SD/CAN/Ethernet/PCIe/SATAなど多くの規格を知り、画像処理/音声処理/その他多種多様な技術の知識が必要となります。オシロスコープやプロトコルアナライザで解析、時にはハンダゴテが必要な時があるかもしれません。組み込み一言では語り尽くせないのがこの業界であり、楽しさの一つでもあります。

富士ソフトは40年以上組み込みの開発経験を積んできています。いわばC言語とは生まれた時から一緒、兄弟みたいなものです。
そんな経験と独自の観点からみなさまに楽しんでいただける組み込みコンテンツを今後も更新していきたいと思いますのでご期待くださいね!