【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
目指せ! Cプログラマ

第1回 プログラミング言語Cについて知ろう

長沼 立巳
SSS(G)
小山博史
ガリレオ

2009/12/9

プログラミング言語の基本となる「C」。正しい文法や作法を身に付けよう。Cには確かに学ぶだけの価値がある(編集部)
- PR -

 プログラミング言語Cは開発の仕事に役立つ人気のあるプログラミング言語です。

 この連載では、Cでのソフトウェア開発をこれから始めようという方や、使った経験はあるが勉強し直したいという方のために、基本をきちんと押さえながら勉強できるような解説をしていきます。

 なるべく正しい文法や作法を身に付けていただくためにJIS規格を基本に解説しますが、それだけにこだわらず実際の開発で役に立つことを分かりやすくお伝えしていきます。

目指せ! Cプログラマ バックナンバー

Cの成り立ちと規格

 まずは、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の特徴と用途

 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の仕様どおりでない部分については、その内容を説明するときに注意事項を紹介していきます。

 プログラム開発環境はMinGWEclipseを使います。この環境の構築方法については次回の記事で説明します。

 なお、Visual C++ 2008でもサンプルプログラムの動作確認を行っていますので、こちらを使っていただいてもかまいません。しかし、Visual C++ 2008はC99で追加された仕様に対応していませんので、それらの機能を利用したプログラムは動作しません。そのため本連載で紹介するサンプルプログラムの一部については、そのままでは動作しませんのでご承知ください。この点についても、必要のあるときに注意事項を紹介します。

 普通のソフトウェア開発では、設計、実装、試験、リリースの順に作業が進みます。この連載ではCの文法を中心としますので、これらの作業の実装フェーズで必要な知識が身に付くように説明する予定です。

 
1/2
next

Index
プログラミング言語Cについて知ろう
  Page1
Cの成り立ちと規格
Cの特徴と用途
本連載の方針
  Page2
Cプログラミングの基本
Cプログラムを効率的に開発する
今回学んだこと

index 目指せ! Cプログラマ

 Coding Edgeお勧め記事
いまさらアルゴリズムを学ぶ意味
コーディングに役立つ! アルゴリズムの基本(1)
 コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう
Zope 3の魅力に迫る
Zope 3とは何ぞや?(1)
 Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか?
貧弱環境プログラミングのススメ
柴田 淳のコーディング天国
 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く?
Haskellプログラミングの楽しみ方
のんびりHaskell(1)
 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう
ちょっと変わったLisp入門
Gaucheでメタプログラミング(1)
 Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう
  Coding Edgeフォーラムフィード  2.01.00.91

Coding Edge フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  直属上司が海外にいるのエンジニアに見る
【実例】場所に捉われないワークスタイル

  「仮想化工房」のマイスターが選んだのは
VMware、Hyper-V、そしてVirtageだった!

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?