プログラミング言語の基本となる「C」。正しい文法や作法を身に付けよう。Cには確かに学ぶだけの価値がある(編集部)
プログラミング言語Cは開発の仕事に役立つ人気のあるプログラミング言語です。
この連載では、Cでのソフトウェア開発をこれから始めようという方や、使った経験はあるが勉強し直したいという方のために、基本をきちんと押さえながら勉強できるような解説をしていきます。
なるべく正しい文法や作法を身に付けていただくためにJIS規格を基本に解説しますが、それだけにこだわらず実際の開発で役に立つことを分かりやすくお伝えしていきます。
まずは、Cの成り立ちと規格について知っておきましょう。ちょっと堅苦しい感じがするかもしれませんが、歴史を知っているとなぜこういう書き方をするのか、こういった機能があるのかといったことが分かります。また、規格を知っているとプログラミングをしていて何か問題にぶつかったときに、それが役に立つことが多いからです。
Cはプログラムを記述するためのプログラミング言語の1つです。C言語とも呼ばれます。コンピュータが普及した現在では、さまざまなプログラミング言語が利用されていますが、Cはその中でも歴史が古く、広い分野で使われているプログラミング言語です。
C以外にも、JavaScript、BASIC、Java、Ruby、Python、C++、Lisp、Perl、PHP、Pascal、COBOLなどなど、プログラミング言語にはいろいろあります。普及して有名になったものもあれば、そうでないものもありますが、毎年いろいろなプログラミング言語が発表されています。2008年はScalaがよく話題にあがりましたし、2009年11月にはGoogleがGoを発表して注目されています。
Cは1972年ころ、AT&Tベル研究所のデニス・リッチーにより開発されました。できたばかりのCは、それまでのプログラミング言語と比べて書きやすく読みやすいことから、研究者や開発者の間で色々な用途で使われ始めました。
この頃のCの仕様は、ブライアン・カーニハンとデニス・リッチーが書き上げた『The Programming Language C』という本の巻末にある付録を、よりどころとしていました。この仕様は著者の名前からK&R Cと呼ばれます。
ところが、このK&R Cは仕様があいまいで、専門家だけではなくもっと多くの人たちに利用してもらうには、使いづらい部分も抱えていました。Cが普及するにしたがって、この仕様の問題は大きなものになっていきます。
このような状況から、Cというものをきちんと定義することの必要性を感じた当時の人たちは、米国の標準規格としてCを定めることにしました。数年越しの作業の末、1989年にできたCの規格がANSIプログラミング言語C(X3.159-1989)です。
この規格は、ANSI Cと呼ばれ、成立した年の下2けたを抜き出してC89とも呼ばれます。この標準規格はCの普及を大きく後押ししました。この翌年には、ANSI CをもとにISO国際標準規格も策定されます(ISO/IEC 9899:1990)。
ISO国際標準規格に採用された後も、より多くの環境で使えるようにCの標準規格は更新されていきます。1995年には、多バイト文字拡張環境でも利用しやすいような拡張が加えられました。
さらに、C89以降に出てきた改善の要望を反映して比較的大きな拡張が加えられ、規格が更新されました(ISO/IEC 9899:1999)。1999年に策定されたこの規格はC99とも呼ばれます。日本では、このC99を日本語に翻訳したものがJISとして登録され、2009年現在もこれが最新の規格となっています(JIS X 3010:2003)。
K&R CとANSI Cの仕様は大きく異なっていて、互換性はあまりありません。しかし現在では、K&R C時代のプログラムにお目にかかることはほとんどないと思いますので、気にする必要はありません。
ANSI C以降のCは互換性を保って拡張されていますので、ANSI C仕様で書かれたCプログラムであれば、新しい仕様に準拠した環境でも利用できます。逆に、新しい仕様を利用して書いたプログラムを古い仕様に準拠した環境では利用できませんので注意が必要となります。
Cは、オペレーティングシステム(OS)やプログラム開発環境など、コンピュータの利用をサポートするシステムを開発するためのプログラミング言語として出発しました。その頃と比べてCの応用範囲は広がっていますが、このようなシステムプログラミングという分野は、現在でもCがもっとも得意とする分野です。
ソースコードが公開されていて、私たちがソースコードにアクセスできるソフトウェアを調べると、多くのシステムソフトウェアがCで書かれていることが分かります。
例えば、オープンソースソフトウェア(OSS)のオペレーティングシステムとして有名なLinuxのカーネルはCで開発されています。Linuxの周辺で利用されているソフトウェアもCで開発されているものが多くあります。Linuxディストリビューションで利用されているコマンドラインシェル環境のBashや、GUI環境のGnomeで利用されているツールキットGTK+もCで開発されています。
Linux以外のオペレーティングシステムでは、FreeBSD、Solaris、Mac OS Xもカーネル部分のほとんどがCで開発されています。これらのOSでは、カーネル以外でも多くのプログラムにおいてCが利用されています。
Cは、組み込みソフトウェアの開発でも広く利用されています。組み込みソフトウェアとは、電子機器の中に組み込まれるソフトウェアのことです。エンベデッドシステムや、ファームウェアと呼ばれる場合もあります。
組み込みソフトウェアが利用される電子機器には、家電や携帯機器だけではなく、医療機器や自動車なども含まれます。このような環境で使われるソフトウェアには、PC上のソフトウェアと比較して、リアルタイム性や信頼性などが求められることがあります。そのような要求を実現するプログラムを開発するときにもCが利用されています。
私たちが毎日お世話になっているインターネットの世界にも、Cで書かれたソフトウェアはたくさんあります。WebサーバのApache HTTP Server、DNSサーバのBIND、メールサーバのSendmail、Postfix、qmailなどはよく使われています。
また、C以外のプログラム開発環境を構築するときにもCが使われています。GCC、Ruby、Python、Perlなども、オリジナルの環境はCで書かれました。
こういったことから、プログラミング言語としてCはコンピュータのあるところには欠くことのできない存在だということが分かります。ですから、Cを使いこなせるようになることで、あなたのソフトウェア開発者としての技術力は高まるはずです。「Cには確かに学ぶだけの価値がある」ということを知っておいてください。
本連載では、Cによるプログラミングの基本と環境の構築方法を説明したあと、Cの文法について整理していきます。
Cの文法はJIS X 3010、つまり最新の標準規格であるC99に準拠した環境を想定して解説します。
しかしながら、現在使われているCの開発環境がすべてC99の仕様を満たしているわけではありません。また、C99で新しく追加された仕様の中には、あまり使われていないものもあります。
そのため、環境がC99の仕様どおりでない部分については、その内容を説明するときに注意事項を紹介していきます。
プログラム開発環境はMinGWとEclipseを使います。この環境の構築方法については次回の記事で説明します。
なお、Visual C++ 2008でもサンプルプログラムの動作確認を行っていますので、こちらを使っていただいてもかまいません。しかし、Visual C++ 2008はC99で追加された仕様に対応していませんので、それらの機能を利用したプログラムは動作しません。そのため本連載で紹介するサンプルプログラムの一部については、そのままでは動作しませんのでご承知ください。この点についても、必要のあるときに注意事項を紹介します。
普通のソフトウェア開発では、設計、実装、試験、リリースの順に作業が進みます。この連載ではCの文法を中心としますので、これらの作業の実装フェーズで必要な知識が身に付くように説明する予定です。
Copyright © ITmedia, Inc. All Rights Reserved.