「コマンドプロンプト」でコンパイルする方法をもう少し探ってみます。

 今度は、「Visual C++ 2005 Express Edition」のヘルプで「環境変数」というキーワードで検索。すると、

コマンド ライン ビルドのパスと環境変数の設定」のページに

vcvars32.bat

というバッチファイルを起動すれば、コマンドプロンプトでコンパイルできる、とあるのを見つけました。というわけで、このファイルが入っているフォルダを先ず見つけ出した後で、「コマンドプロンプト」内で、このファイルがあるディレクトリ(フォルダ)まで移動し、

vcvars32.bat

と入力しEnterキーを押します。すると、表示されたものの最後に、

Setting environment for using Microsoft Visual Studio 2005 x86 tools

と表示されました。おそらくこれでコンパイルする環境が整ったようです。というわけで、

tsundere.c

コマンドプロンプトでコンパイルしてみます。

cl tsundere.c

と入力しEnterキーを押します。すると、

/out:tsundere.exe
tsundere.obj


と表示されました。

大成功!

ついにできました。しかし、一度「コマンドプロンプト」を閉じて再び「コマンドプロンプト」を起動してコンパイルを試してみると出来ませんでした。おそらく、「環境変数」を設定しないと、「コマンドプロンプト」を起動するたびにvcvars32.batを起動しないといけないんでしょう。

 ここで少し考察。コマンドプロンプトで環境変数を表示するコマンド名「path」は、「道、道筋」の意味です。IT用語辞典にも、同様の記述がありました。そこから推測するに、「環境変数を設定する」というのは、「使いたいアプリケーション(ここではコンパイラ)までの道筋をあらかじめ指定し、いつでも使うことが出来るようにする」ことなのだと思います。

 というわけで、「コマンドプロンプト」でもコンパイルする事ができるようになりました。「環境変数の設定」に関する疑問が残りましたが保留とし、先に進むことにします。今回、「コマンドプロンプト」という、真っ黒な画面のウィンドウの文字だけの世界を体験した事で、今までよりも少しパソコンの深層を覗いた気がします。コンパイルするだけでも大変な困難でしたが、これで、自分で書いたプログラムを動かせるところまで来ました。また、「Visual C++ 2005 Express Edition」のヘルプの「コンパイラ オプション」のページの「カテゴリ別のコンパイラ オプション」を見ると、コンパイルする時に最大限に最適化したり、実行速度を優先したものにしたりといった細かな指定が出来るようです。C言語にもっと習熟したら、もう一度コンパイルについて考えてみようと思います。
2008.04.07 Mon l C TB(0) l top ▲
 「Visual Studio 2005 コマンドプロンプト」を使ってコンパイルする事に成功しました。

しかし、ひとつ問題が残りました。

「Visual Studio 2005 コマンドプロンプト」ではコンパイル出来たのに「コマンドプロンプト」ではコンパイルできなかった

のです。

「コマンドプロンプト」で、

cl tsundere.c

と入力してEnterキーを押してみたのですが、

'cl' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません。


と表示されました。コンパイルするためのコマンド「cl」が命令として認識されていないのでコンパイルが出来ないようです。

 では、どうすれば「コマンドプロンプト」にコマンド「cl」を認識させる事が出来るのか?少し探ってみる事にしました。 

 C言語をコンパイルできるコンパイラは他にもたとえば

Borland C++ Compiler 5.5

というコンパイラがあります。これを使ってコンパイルするには使う前に「環境変数の設定」が必要とのこと。

環境変数」とは、Windowsの「ヘルプとサポート」によると、

Windows で使用できるシンボリック名と関連付けられた、ドライブ、パス、ファイル名などの環境情報で構成される文字列。環境変数を定義するには、コントロール パネルの [システム] を利用するか、コマンド プロンプトで set コマンドを実行します。

とあります。私は「Visual C++ 2005 Express Edition」をインストールした時に、「環境変数の設定」というものをしていません。そんなくだりは無かったので。つまり、「Visual Studio 2005 コマンドプロンプト」のほうはインストールの際に環境設定がおそらく自動的にされたのに対し、「コマンドプロンプト」では設定されていないのだと考えました。では、どのように設定すればいいのか。そこで、Windowsの「ヘルプとサポート」で「環境変数」で検索してみました。検索結果を読んでみました。それに従って、コントロールパネルのシステムの「詳細設定」タブの中にある環境変数をクリックすると、環境変数を色々と変更できるウィンドウが現れました。「Borland C++ Compiler 5.5」をインストールして使えるようにする方法から推測は出来るのですが、ちょっとまだ私の頭ではいまいち理解し難(がた)いので、ここで中断する事にしました。

また、「コマンドプロンプト」で、

path

というコマンドを実行してみると、設定済みの環境変数が表示される事がわかりました。で、早速実行。すると、「Visual Studio 2005 コマンドプロンプト」と「コマンドプロンプト」では環境変数の内容に違いがあることが分かりました。ですが、これをどういじっていいのか分からないのでこれも一時保留します。

part.6へ続く)
2008.04.07 Mon l C TB(0) l top ▲
 本題です。コンパイルしてみます。

 たとえば、プログラミングの世界で有名な小さなプログラム「Hello, World」の文字の部分を変えてみた、


#include

int main(void)
{
printf("べ、別にあんたのためにコンパイルしてるんじゃないんだからね。");

return 0;
}




なんてものを、メモ帳に書いて、ファイル名に「tsundere.c」として保存。C言語のファイルとしたいので、

拡張子は「.c」

としておく。

 次に、コマンドプロンプトでそのファイルがあるところまで移動。コマンドプロンプトで「chdir(cd)」コマンドを使って移動するのが面倒な場合は、コマンドプロンプトを使わずにファイルをカット&ペーストしてファイルを今コマンドプロンプトで表示されているフォルダに移動。今回は、「コマンドプロンプト」と「Visual Studio 2005 コマンドプロンプト」の両方でコンパイルを試すので、別のフォルダにファイルをコピーしておきました。

そして、

cl tsundere.c

と入力してEnterキーを打つと、コンパイルされるはず。すると、

「Visual Studio 2005 コマンドプロンプト」では、画面に表示されたものの最後の部分に

/out:tsundere.exe
tsundere.obj


と表示されて、アプリケーションの拡張子「.exe」が付いたものができたようです。tsundere.objがなにものかは今はまだ分かっていません。Windows上でもこの2つのファイルが確かにあります。「Visual Studio 2005 コマンドプロンプト」上でコマンド「dir」を入力しても2つのファイルが出来たことが分かります。

とうとうやってきました、自分で作ったプログラムを実行する時が。

tsundere.exe

と入力してEnterキーを打つと、

べ、別にあんたのためにコンパイルしてるんじゃないんだからね。

と表示されました。

成功です。

ひとつ壁を越えました。まだグラフィカルなものではない、文字だけを表示する、たったそれだけのプログラムです。真っ黒な画面に白色の文字が表示されるだけです。それだけなんですが、嬉しいです。これからはプログラムを書いたらすぐにコンパイルして実行するところまで出来ます。書いたプログラムにエラー(間違い)があると、報告してくれるようですが、今回は何の問題も無かったようでした。ちなみに、

tsundere

と拡張子を外したものを入力してEnterキーを押しても実行されるようです。

 これで自分で書いたプログラムをコンパイルして実行する事が出来るようになりました。

part.5へ続く)
2008.04.07 Mon l C TB(0) l top ▲
 コマンドプロンプトでは、今自分が開いている場所を

[ドライブ名]:¥[フォルダ名]¥[フォルダ名]>
(¥という円記号が半角では上手く表示されないようなので、全角で表示しています。)

のような形で表示されていて、「>」の横にカーソルがありそこにコマンド(コマンドプロンプトへの命令)を入力して、Enterキーを押すと、コマンドが実行されます。コマンドは、「ヘルプとサポート」内の「コマンドラインリファレンス」によると、150以上ものコマンドがあるようで、色んな操作が出来るらしい。コマンドを使って出来る事には、フォーマットやら、削除やら、設定変更やらちょっと使うのが怖いコマンドもあるので、まず出来そうなものを探していくつか試してみました。

 たとえば、

dir

というコマンド。directory(ディレクトリ)という単語を略した名前のこのコマンド。この3文字だけ入力してEnterキーを押すと、今いる(表示されている)フォルダの中身を見ることができます。ファイルとそのフォルダの中にあるフォルダが表示されます。実行してみて分かったのですがフォルダの事をディレクトリと呼ぶようです。ネットで調べてみたら、ディレクトリとフォルダの意味のようです。

chdir [今いるディレクトリ(フォルダ)の中にあるディレクトリ名]

もしくは

cd [今いるディレクトリ(フォルダ)の中にあるディレクトリ名]

を書いてEnterキーを押すと、そのディレクトリに移動します。コマンドプロンプトに入力する時には大かっこ([ ])は外します。空白は1つ空いていれば十分です。コマンド名はChange directory(ディレクトリを変更する)という意味です。ひとつ上の階層のディレクトリに戻る時は

chdir .. (もしくはcd ..)

のようにスペースで空けてピリオド二つだけ打ち込んでからEnterキーを打つと、ひとつ上の階層(フォルダ)に戻ります。さらに、

chdir /d [ドライブ名:\]

と入力すれば、別のドライブに移動する事が出来ます。他にも様々なコマンドがあっていろんな操作がが出来るようですが、今回は自分がコマンドプロンプトに慣れることが目的なので、いずれもっと操作できるようになりたいと思います。

part.4へ続く)
2008.04.07 Mon l C TB(0) l top ▲
 コマンドプロンプトでコンパイルをする場合、「Visual C++ 2005 Express Editionのコンパイラ」では、

cl [拡張子(.cやcpp)を含めたファイル名]
(clの後ろは空白(スペース)で空けて,大かっこ[ ]は外す) 

と入力してEnterキーを打てば、コンパイルする事が出来て、次に

[ファイル名]

を入力してEnterキーを打てば、プログラムが実行されるらしいことは分かりました。

 というわけで、ここから実際に私はコンパイルを試みました。

 コマンドプロンプトは、

・Windowsについている「コマンドプロンプト」

・「Visual C++ 2005 Express Edition」をインストールした時に知らないうちに入っていた、「Visual Studio 2005 コマンドプロンプト」

の二つが私のパソコンには入っています。同じものなのかどうかも分からないので、両方起動して両方とも同じなのかどうかも検証しながら進めることにしました。さて、またここでストップです。この真っ黒な画面をどう操作するのかいまいち不安です。Windowsが起動する時に毎回真っ黒な画面に文字だけが表示される瞬間があります。それはおそらく「MS-DOS」というもので、「MS-DOS」と「コマンドプロンプト」は似たものだろうと推測しました。Windowsの「ヘルプとサポート」で「MS-DOS」で検索。「MS-DOS コマンドのヘルプを表示するには」というページから、予想通り、「コマンドプロンプト」と関係があることが分かりました。次に「コマンドプロンプト」で検索してみたら、

コマンド プロンプトを構成する」のページの一番下の関連項目のリンクから、

コマンド ライン リファレンス

というものが出てきました。コマンドライン(Command line)は買ってきたMS-DOSの本に書いてあることと似ています。そこで、本とヘルプの二つを照らし合わせながら二つのコマンドプロンプトを動かしてみました。

part.3へ続く)
2008.04.07 Mon l C TB(0) l top ▲
 C言語を学び始めて、もうすぐ一ヶ月。本を読むばかりでなく、実際にテキストエディタでプログラムを書き、コンパイルしプログラムを実行することにしました。

 さて、ここからが問題です。

「どうすればコンパイラでコンパイルする事が出来、そして、書いたプログラムを実行させる事が出来るのか。」

 これが、問題です。大問題です。C言語を理解してもプログラムを実行できなければ今まで何をやってきたのか分からなくなってしまいます。

 コンパイルするための選択肢はまず二つ。

1.コマンドプロンプトでコンパイルし、実行する。
2.IDE(Integrated Development Environment:統合開発環境)上でコンパイルし、実行する。

どちらもできるようになりたい。せっかく、統合開発環境である「Visual C++ 2005 Express Edition」をインストールしたので、これを使ってみたいけれど、ボタンの数も多く、メニューの新規作成のところで既に立ち止まってしまいました。Visual C++入門関連の本もいくつか読みましたが、今学んでいる初歩段階のプログラムが入門編であるにもかかわらず、全く出てきません。現在の私には門を通る事すら、難しいのということなのでしょうか。

 というわけで、一旦2.で悩むのは中断して1.でコンパイルというものをするところまで辿り着こうと考えました。

part.2へ続く)
2008.04.07 Mon l C TB(0) l top ▲
 私が今プログラミング学習のために主に読んでいる本は、2008年4月4日現在、

・基本情報技術者試験 C言語集中ゼミ
・独習C 第3版

の2冊です。他にも

プログラミング初心者用の本
Visual C++の本
初級シスアド、基本情報技術者試験

などの本も購入しましたが、まだ読んでいません。また、他の言語の本なども買ったりしました。

 私が感じた疑問をブログに綴っていますが、その疑問はタイトルを挙げた上の2冊から生じたものが主です。そして、その疑問を元にネットで調べたり本で調べたり、自分で気づいたりといった過程をこのブログに書いています。

 しかし、プログラミングの本で全般に気になるのが、

「参考文献って全く載せてないけれど、構わないのかな?」

ということ。プログラミングの文法にしろ、用語(特に翻訳された日本語の専門用語)にしろ、誰か最初に編み出した人がいて書かれた文書があるはずだと思うのですが、何の文献を参考にしたのかさっぱり書いていません。一般常識として参考文献を提示するまでもないということでしょうか。C言語のホームページもたくさんありますが、参考文献が書いてあるものよりは書いてないもののほうが多い印象を受けています。

 では、私はこのブログを書くに当たってどうすればいいのかを考えてみました。

1.引用する部分は緑色の文字を使うことで明確化する。
2.プログラミング言語の仕様として定義されているものは一般常識とみなす。
3.参考文献は、カテゴリに「参考文献について」をつくり明示しておく。


1.は引用が引用である事を分かりやすくするためです。

2.について。社団法人 著作権情報センターの著作権関係法令データベース国内法令のページによると、



第二章 著作者の権利
第一節 著作物
(著作物の例示)
第十条
2 事実の伝達にすぎない雑報及び時事の報道は、前項第一号に掲げる著作物に該当しない。
3 第一項第九号に掲げる著作物に対するこの法律による保護は、その著作物を作成するために用いるプログラム言語、規約及び解法に及ばない。この場合において、これらの用語の意義は、次の各号に定めるところによる。
  一 プログラム言語 プログラムを表現する手段としての文字その他の記号及びその体系をいう。
  二 規約 特定のプログラムにおける前号のプログラム言語の用法についての特別の約束をいう。
  三 解法 プログラムにおける電子計算機に対する指令の組合せの方法をいう。
(昭六〇法六二・1項九号3項追加)





とあることから、問題無いと判断します。プログラムについては自分で実際にもしくは頭の中で流れ図を作成してそれを基に自分で記述していったものを使おうと思っています。文章としての引用の場合は1.で述べたように緑色で記載します。(基本的なプログラムは著作物というよりはむしろ第十条二における「事実」であると思いますが、それでも無難に避けて自分で頭を悩ませて書きます。プログラミング習得のためにはそのほうがいいでしょうし。)ちなみに法律の内容は第十三条一によると著作物に当たらないようです。

 3.について。著作権法を読んでみると、このブログで書くことについて別段参考文献を明示する必要ないとも思うのですが、どの本を読んでいるのか、どこのホームページで知ったことなのかも情報として記載したほうがプログラミングを学んでいる人でこのブログに辿り着いた人の参考になると思うので、カテゴリをつくり載せます。

 世の中のものは全て過去のものを受け継いでいると思っています。遺伝子と同じように大部分(何%かはそれぞれ異なる)はコピーでそして残りの部分がオリジナルという考えです。たとえば、文章はいくら自分で書いていても、それを書き表すのに用いている文字は当然オリジナルではなく、過去から連綿として受け継がれてきたものです。私が書いているものもそういった流れの中の小さな泡沫(ほうまつ)でしかないのかもしれませんが、プログラミングを楽しみながら学び、それをブログに書き綴っていこうと思います。
2008.04.04 Fri l このブログについて TB(0) l top ▲
 C言語には、プログラムを繰り返し(ループ:loop)実行させるものがあります。

forループ
whileループ
do whileループ

の3種類です。(他にもあるかもしれませんが、これを書いている時点ではよく知りません。)

 「while」はたとえば接続詞の意味で、「…するうちに;…の間ずっと, するかぎりは」(http://dic.yahoo.co.jp/dsearch?enc=UTF-8&p=while&stype=0&dtype=1)というのがあるので、「while」や「do while」がループを表すのをすぐに納得できました。

 しかし、「for」って何でしょう?前置詞の「…するために」や、接続詞の「というのは」では、「for」がなぜループなのかよく分からない。そう悩んでいたら、思い出しました。

「for」には、前置詞の「…の間(ずっと)」、という意味があったことを。http://dic.yahoo.co.jp/dsearch?enc=UTF-8&p=for&dtype=1&dname=1na&stype=0&pagenum=1&index=02815300

 I have studied C programming language for a month. (私は一ヶ月間C言語を勉強している。)

といった完了の英文を昔習った事を思い出しました。

 これはあっさり解決しました。別に単語の意味など知らなくてもいいのかもしれませんが、知っていたほうがすっきりしますし。こうやってひとつずつ小さなことからコツコツとプログラミングを理解していこうと思います。

 ちなみに英語の例文を書いたときに、単にCだと別の意味にとる人がいるに違いないと思ったのは言うまでもありません。(おそらく既出でしょう。)
2008.04.01 Tue l C TB(0) l top ▲
  「a = 1」 

この短い表現に慣れるのに相当な時間を費やしました。たった3文字です。しかし、私にとってこの表現はカルチャーショックでした。

 C言語では、「a = 1」は、

「aに1を代入する」

という意味です。この代入するって何?って思いました。それまで算数に始まり、数学でも「a = 1」は、

「aは1に等しい」

と習い、それを使い続けてきました。「=」(equal :イコール)は

「左辺と右辺が等しい事を表す記号」

として、脳裏に焼きついていたのです。

 「a = 1」はまだ良かったのです。「=」を等号と捉えても問題無さそうですし。しかし、

「a = a + 1」

を見た時、「何なんだ、この式は。」と思ったのは言うまでもありません。どう見ても左辺と右辺は等しくありません。「2 = 2 + 1」とaを数字に置き換えたところで左辺の値2と右辺の値3は等しいはずがありません。

 

 C言語の世界において、「a = a + 1」は「aに1を加えたものをaに代入する」

を意味するようです。もう少し細かく書くと、

「aに今入っている値に1を加えた値をaに新しく入れる」

ということのようです。たとえば、最初aに2が入っていたとしたら、1を加えた値3にaを交代させることを表しているのでしょう。(「代入する」を「格納する」や「上書きする」といった表現で書かれていますが、もっと理解度が増せばこの先分かるようになるのでしょうか。)

 そして、「=」に納得した後、C言語の世界で等号を表す記号は、「==」という形だということを知りました。

 要するに、

「数学の世界とプログラミングの世界では、表現が異なる。」

ということです。日本語と英語が違うようなものですね。アルファベットのaだって、英語では「エー」、ドイツ語では「アー」と発音しますし、イタリア語のアルファベットは21文字しかないし、世の中色々ということです。それに気づくのに、随分時間を要しました。けれども、そのおかげで自分の凝り固まった考えが和(やわ)らいだようです。視野が広くなった感じがします。私にとって柔軟な考えを手に入れる事が出来ただけでもこの壁を乗り越えた価値はあると思います。まだ分からない事がたくさんあるので、ひとつずつ解決していきたいです。
2008.04.01 Tue l C TB(0) l top ▲