C言語を始めるには?

サイト全体の目次

稿


稿

C言語をはじめるには

テキストエディタで C言語 の文法に従ったソースを書く

テキストエディタとは、Windows に付属のメモ帳でもかまいません。英文が書けるものなら基本的には何でもいいんです。でも、ワープロソフトなんかだと書式を飾る余計なデータが入ってしまうので使えません。ソースとは、元になるプログラムです。各言語(ここでは C言語)の文法にしたがって書かれた、テキスト形式のファイルです。

C言語 のソースファイルをコンパイルする

せっかく C言語 の文法にしたがってソースファイルを書いてもコンパイルという作業をしなければ、プログラムを実行することは出来ません。このコンパイルとは C言語 のソースをコンピュータが理解できる機械語に、つまり、実行形式のファイル (*1) にする作業です。そして、コンパイルをしてくれるソフトが Visual C++ に代表されるコンパイラと言うソフト (*2) です。

Windows なら主に拡張子が exe のファイル
厳密には Visual C++ は「統合開発環境」というものに分類されます。

つまり流れとしては、ソースを書くコンパイルする実行するということになります。もちろん、ソースに間違えがあれば正しくコンパイルされません。また、完成して実行してみても気に入らない場合もあるでしょう。そんな場合は、もう一度ソースを書き直してコンパイルします。「面倒だなぁ」と思うかもしれませんが、簡単なソースであればコンパイルは数秒で終わってしまうのでその点は問題ないでしょう。

というわけで、テキストエディタは最悪、Win 付属のメモ帳を使うとしても、コンパイラなるものは新しく必要だということになりますね。

このコンパイラにはいろいろありますが、Windows では Microsoft の VisualStudio ファミリーである Visual C++ などが有名でしょう。しかし、はじめから Windows ライクなソフトを作るのは、はっきり言って不可能です。最初のうちは Visual C++ の持つ豊富な機能のほとんどが無駄になってしまうでしょう。最悪の場合、Visual C++ の機能をフルに生かせるようになったころには新しいバージョンが出ているなんてことにもなりかねません。とはいえ Visual C++ からは洗練された環境(テキストエディタも統合)が提供され、たとえ Windows ライクなソフトが作れなくても使いやすいのは確かでしょう。というわけで、軽い気持ちで始めようという人にはおすすめできませんし、逆にそれなりの技術レベルを身に付けようと思っているなら、こういった高性能コンパイラをひとつ用意するのもいいでしょう。

これに対して UNIX や、UNIX から派生した Linux とよばれる OS には、これらの OS 自体が C言語でかかれているということもあって、C/C++ 言語のコンパイラが標準で装備されています。つまりタダってことですね。しかしながら、UNIX を扱おうと思ったらそれだけでものすごい労力を必要とするでしょう。逆にコンパイラそのものの操作性は、基本的にコンソールからコマンドを入力して行うなど、最低限のものになっています (*3) 。Windows にもこういったフリーのコンパイラがありますが、似たようなものです。正直言って、多少の不便製を感じることもあります。

Makefile とよばれるファイルを用意すれば多少便利になるようですが

結局、問題は使いやすさと価格のどちらをとるかということになるでしょう。また、他のメーカーからもコンパイラがだされているので、このへんはみなさんの必要性にあわせて選んでください。

フリーのコンパイラ

以前は Borland というところが出していた「Borland C++ Compiler」というコンパイラが、フリー(無償)かつシンプルなために多くのC言語入門者に愛用されていました。

けれども、近年では Microsoft が Visual Studio ファミリーの各言語における学習用バージョンとして「Express Edition」をラインナップし、無償で配布するようになりました。

初めての人には「Visual C++」の高機能さが逆に使いづらいと感じるかもしれません。しかし、慣れてくればやはり便利なのも確かですから、早々に慣れてしまいましょう。

「Visual C++ Express Edition」は2008年1月1日現在、

からインストールできます。

Visual Studio について(2005/2008 Professional/Express 共通)

Visual Studio 使えてますか?

さて「C言語をはじめるぞ!」と意気込んで Visual Studio を用意したあなた!C言語の勉強はスムースにはじめることができたでしょうか?「ノーォォォッ!」という人が結構いるのではないでしょうか。実は私もその口でした(当時はVC++6.0でしたが)。というわけで、このページでは Visual Studio に入っている Visual C++ を使ってC言語の勉強ができるように手引きしてまいりたいと思います。 (*4)

ただしこのページでできるようになるのは一般的ななC言語のコンソールアプリケーションです。

なお、このコーナーでは、Visual Studio 2005 Professional を使用していますが、2008 や Express 版も同様に実行することができます。

VisualStudio ってなんですか?

VisualStudio は統合開発環境Integrated Development Environment:略してIDE)です。っていっても「ハァ?」ですね。普通、最も簡単なC言語プログラムであればたった一つのソースファイルを作ってそれをコンパイルするだけです。しかし、巨大な Windows アプリケーションを作ろうと思うとそういうわけにはいきません。作ろうとしているものの規模にもよりますが、時には膨大な数のソースファイルやデータを扱わなければなりません。しかも、そういったアプリケーションを複数作らなければならないシステムもあるでしょう。そうなってくるともはや人手には終えません。そこで活躍するのが Visual Studio に代表される統合開発環境です。

統合開発環境は膨大な数のファイルを効率的に管理し、コンパイルして一つのプログラムに仕上げてくれます。さらにプログラミングを効率的に行うための機能も充実しているので大変便利です。

おまけ ~ととぼん と C言語~


執筆:1999/09
このセクションのコメントは、後日、文章の内容を振り返って書き加えたものです。
僕がプログラミングを勉強したいと思った理由を少し書きます。(C言語 というより、なぜプログラミングを始めたかって感じの内容です。)

C言語 を選んだわけ

それほど大きな理由はありません。まず、開発環境が BASIC より安い(最上位の Visual C++ Ver.6 を、学割で 20,000円ぐらい)ことと、どっかで「ソフトウェア開発の多くは、現在 C言語 が主流である。」と聞いた事が最大の理由です。ただし、最近、プログラミングに詳しい方にこの話しをしたところ「世の中にはいろいろプログラミング言語があるけど、それらは、それぞれの仕事に合うように作られてきたんだ。適材適所ってやつだね。だから、C言語 が一番汎用性が高いって言う理由は特に無いと思うよ。」というようなことを言われ、納得しました。 (*5)

C言語 や C++ はもちろん、動的な Web サイトを作るのに欠かせない Java や JavaScript、PHP などの新しい言語から、一方で情報処理試験から削除された Fortran まで千差万別の言語が存在しますが、やはり本格的にやるなら大御所といえる C/C++言語 か Java を最初に学ぶのがベストでしょう。

その他の理由としては、僕が本格的にプログラミングを始めようと思ったころは僕自身、C言語 と BASIC しかプログラミング言語を知らなかったのです。そこで、その二つを比べたのですが、Visual Basic はソフトを配布する際、専用のランタイムを相手が持っていなければいけないのに対し、C言語 はランタイムにあたる部分をプログラム本体に組み込んでしまうことが出来るという利点がありました (*6) 。また、C言語 のほうが「プロ」っぽい気がしたからです。実際、文法その他、全体的に Basic よりも難しいと思います。(難しいけりゃプロ、ってわけでもないですが。)

今にして思えばなんて安直な(笑)

最後に、これは後から取ってつけた理由なんですが、みなさん Linux(リナックス) ってOS知ってますか?インターネットを結んでいるプロバイダーのコンピュータは UNIX という OS システムを使ってます。専門性の高いような感じのシステムです。これを一般の人でも使えるようにしようと、ノルウェー(だったと思う)の「リーナス(Linux の名前の元)」さんが作った OS、それが Linux で、このソフトはフリーソフトな上にプログラムのソースまで公開しているため、愛好者の間で改良が繰り返されました。その結果、今ではアンチ Windows 派を中心にマイクロソフトを脅かすほどのユーザー数を誇るようになっています。で、UNIX という OS はなんと C言語 で作られているのです (*7) 。ですので当然 UNIX 系の Linux も、C言語 で開発されてるんです。だから、「Linux(UNIX) の世界では C言語 の使える人は強い。」と言うことを友人から聞きいて「C を選んで良かった。」と思いました (*8) 。まあ、こんなところでしょうか。

C言語はベル研(米)で UNIX を記述するために作られた言語です。
Visual Studio にどっぷりはまってしまった現在、Linux のチープな開発環境でプログラミングする気がおきません。とはいえ、いろんなソフトのソースが読めるのは面白いと思いますよ。

プログラミング言語との出会い

僕が最初にプログラミング言語なるものに触れたのは、高校に入って自分専用のパソコンを手に入れてからです。自分専用だから、なにやっても文句は言われない。ということで、OSを起動しないとどうなるかやってみました。この時使っていたのはNEC製だったので、真っ黒な画面に N88 BASIC なるものが起動しました。幸い、父が昔からパソコンをやっていたので聞いてみると、それが N88 BASIC であることを教えてくれ、さらに、旧式パソコン (*9) に付属の BASIC の基本的な説明書もくれました。(昔はソフト売ってないからみんな自分で作っていたんですね。)何にも無い、真っ黒な画面と BASIC 言語の説明書・・・、僕がプログラミングの扉を空けた瞬間です。

私が始めて PC に触ったのは小学2年の時、父の買った NEC PC9801 なんたらかんたら(ともかく 286CPU)でした。今にして思えば父は先見の明があったのでしょう。私に情報教育(タイピング練習)を強制し、私はそれがいやでいやでたまりませんでした。

コンピュータと電卓

僕が最初にやったことは、説明書にしたがって「1+1」の結果を画面に表示させたことです。電卓でやればあっという間ですが、これを表示させるために

CDATA[10 PRINT 1+1

とやる必要がありました。でも、これだけでは僕は感動しません。電卓と比べれば、そっちのほうが楽なんですから。

次にやったことは「変数」と呼ばれるものです。

10 A = 2 (Aに2を入れる)
20 B = 3 (Bに3を入れる)
30 PRINT A+B (A と Bを足したものを表示する)

「A に 2 を入れ、 B に 3 を入れ、AとBを足したものを表示せよ。」という命令で、「5」と表示されました。それでも僕は「ふ~ん」という程度でした。

次にやったことは、ユーザーがデータを入力する方法です。

10 INPUT A (変数Aへのデータ入力を促す)
20 INPUT B (変数Bへのデータ入力を促す)
30 PRINT A+B (AとBを足したものを表示する)

これで、始めてコンピュータと人が対話するプログラムができたのです。また、この式が意味するところは、どんなに難しい、例えば二次方程式の解の公式などを「A+B」の変わりに書いてやれば、人間が変数「X」の値を入れてやるだけで瞬時に答えを出してくれるということです。これは、電卓にはできません。僕が「おっ!」と思った瞬間です。

「もしも」文の感動

次は条件判断をやりました。「もし~ならば・・・して、そうでないなら***しろ」というものです。

10 INPUT A
20 INPUT B
30 IF A < B THEN PRINT ”Aのほうが小さい” ELSE PRINT ”Bのほうが小さい”

30行目は
    もし 「AのほうがBより小さい」 ならば
        「Aのほうが小さい」 と表示せよ。
    そうでないならば
        「Bのほうが小さい」 と表示せよ。」
ということです。

なんと、コンピュータがAとBの大小を判断して、答えてくれたのです。これは感動でした。な~んにもなかった、真っ黒の画面しか映さなかったコンピュータが、人間の質問に答えてくれる道具になった瞬間でした。

さらなる喜び

その後、僕は、「行番号~に行きなさい」という「GO TO」文、「~を?回繰り返しなさい」という「FOR」文をやりました。これに、さっきの「もしも(IF)」文を混ぜると、かなり複雑なこともできるようになます。僕は次第に、”自分で”「無から有を生み出す喜び」を感じるようになって行きました。やっていることは、市販されているWindowsソフトに比べれば本当にちっぽけで、また、普通の人が見れば何の役にも立たない無駄なことかもしれません。でも、そこには、「ソフトを使うだけ」では味わうことのできない、なんともいえない「新鮮さ」がありました。

そんなわけで

BASIC については上に書いた以上の事をするにはいたりませんでした。一度は BASIC を極めようと Windows に対応した Visual BASIC という開発言語を使ってみたのですが、それはすでに、より発展したものとして、大変複雑になっており、少しやってあきらめてしまったのです。ところが今年の春休み、インターネットを導入し、「Vector」なるサイトを見つけると、「Windows95で動くN88BASIC」なるものを見つけました。そうです、あの、僕の知っている BASIC が Windows 上でできるのです。3年前のこととはいえ、あの感動を懐かしく思いながら遊んでいました。そんな時、テレビで見たのが Linux の生みの親、リーナスさんです。考えてみればプログラマーというのは、現代の最先端の一端を支えているのです (*10) 。「プログラマーってすごいなぁ。」と思いました。無から有を作り出す喜び、時代の最先端への憧れ。僕が、本気でプログラミングの勉強をしようと考えたのはそんなことが理由です。

ただのプログラマーで終わるか、システム提案できる SE になれるかは腕次第!