Visual Studioのコンパイラ
http://www.microsoft.com/ja-jp/download/details.aspx?id=4422
Windows SDK
http://msdn.microsoft.com/ja-jp/windows/desktop/bb980924.aspx
※SDKとはSoftware Development Kit
の略っぽい。ソフトウェア開発キット。
とりあえずこの2つが必要かな?SDKは要らないかもしれない。
本当はLinuxを使いたいんだけど、プログラム作ったらWindowsで
動かしたい場合の方が多いし、何だかんだ言ってWindowsの方が
Slackwareより起動することが多い。
しかしVisual Studioのような環境(統合開発環境、IDE)は
プロジェクトだの何だのしちめんd・・・じゃなかった。いろいろと手順を
踏まないとプログラミングを始められないので最初にLinuxで
プログラミングを覚えた自分にはなかなか馴染めませんでした。
というわけでコンパイラとSDKだけインストール。
後はコマンドプロンプトでcl.exeコンパイラを起動するというLinuxに
近いやり方でプログラミングできる環境を用意しました。
①パスを通す(具体的にはコマンドプロンプト上で次のコマンドを打つ)
set PATH=%PROGRAMFILES%\Microsoft Visual Studio 10.0\Common7\IDE\;%PROGRAMFILES%\Microsoft Visual Studio 10.0\VC\BIN;%PROGRAMFILES%\Microsoft Visual Studio 10.0\Common7\Tools;%PROGRAMFILES%\Microsoft Visual Studio 10.0\VC\VCPackages;%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\bin\NETFX 4.0 Tools;%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\bin;%PATH%
拡張子.exeや.batなどのファイルがあるフォルダをここで指定します。
例えば次のフォルダにはcl.exeコンパイラが入っています。
%ProgramFiles%\Microsoft Visual Studio 10.0\VC\BIN
このフォルダにパスを通すとcl.exeが使えるようになります。
②インクルードファイルのあるフォルダを変数「INCLUDE」に書き足す
set INCLUDE=%PROGRAMFILES%\Microsoft Visual Studio 10.0\VC\INCLUDE;%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\include;%INCLUDE%
パスを通すのとほぼ同じ?ちょっと詳しい違いは分からないです。
インクルードファイルやライブラリは単体では実行できないので区別?
これでインクルードファイルが使えるようになります。
③ライブラリのあるフォルダを変数「LIB」、「LIBPATH」に書き足す
set LIB=%PROGRAMFILES%\Microsoft Visual Studio 10.0\VC\LIB;%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\lib;%LIB%
同じくライブラリのあるフォルダを指定します。インクルードファイルと
ライブラリの違いについてもなんとなくしか分かりません。
どちらもプログラムを作るときによく使われるような処理が書いてあるぽい?
画面に文字を表示してみたり、確保したメモリの量を数えてみたりとか
してくれるようなものがあったような気がします。
④vcvars32.batについて
vcvars32.batは①~③のような設定をしてくれる(はずの)バッチファイル
です。実行してもうまくいかないのでここではスルーです。次の場所にあります。
"%ProgramFiles%\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"
とりあえず①~③のコマンドをそのままバッチファイル化させてvcvars32.bat
の代わりに使うことにしました。
vcpath.batが変数の書き換えを行うファイル、
clset.batがvcpath.batを呼び出し、コマンドプロンプトを起動するファイルです。
vcpath.bat
set PATH=%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\;%ProgramFiles%\Microsoft Visual Studio 10.0\VC\BIN;%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\Tools;%ProgramFiles%\Microsoft Visual Studio 10.0\VC\VCPackages;%ProgramFiles%\Microsoft SDKs\Windows\v7.1\bin\NETFX 4.0 Tools;%ProgramFiles%\Microsoft SDKs\Windows\v7.1\bin;%PATH%
set INCLUDE=%ProgramFiles%\Microsoft Visual Studio 10.0\VC\INCLUDE;%ProgramFiles%\Microsoft SDKs\Windows\v7.1\include;%INCLUDE%
set LIB=%ProgramFiles%\Microsoft Visual Studio 10.0\VC\LIB;%ProgramFiles%\Microsoft SDKs\Windows\v7.1\lib;%LIB%
clset.bat
call "D:\.....\vcpath.bat"
cmd /k cd /d 作業フォルダ
こうしておけば環境変数を書き換えなくて良いし、プログラミングを始める前
に準備しておきたいものなども書き足せる。例えば、後になってから作成した
openclpath.batを追加したい場合は
call "D:\.....\openclpath.bat"
を書き足すだけです。
⑤Emacsについて
メモ帳でも良いんだけど、最初にプログラミングを習ったときに使っていました。
これが無いとプログラミング厳しい。使う場合はCtrlとCaps Lockを入れ替え推奨。
ちなみにEmacsと並ぶもうひとつの派閥(?)であるviはあまり使いこなせません。
使いこなせるようになりますようにと願って百花IDに使ったとかいう噂が・・・
⑥とりあえず動かしてみる
次のプログラムをtest.cppとかで保存してコンパイルして実行します。
#include<iostream>
using namespace std;
int main(){
cout << "Harou, Keihou" << endl;
return 0;
}
※今回だけバッチファイルを使わずに①~③のコマンドをコピペしました。
コンパイルしたらwarningが出たり、生成されるファイルが.exeだけじゃなく
.objのファイルも生成されたりしました。勉強不足なので説明できませんorz
とりあえず実行すれば適当に文字を表示するプログラムができました。
⑦プログラムについて
5行程度なので1行ずつ解説します。
#include<iostream>
iostreamというファイルを使います。実際に
%ProgramFiles%\Microsoft Visual Studio 10.0\VC\INCLUDE
の中を見てみるとiostreamという名前のファイルがありました。
このファイルの中にある、画面に文字を表示する処理を使いました。
using namespace std;
そして説明できない。stdという名前でひとまとめにされてるっぽい何かを
使うという意味?分からないことはいわゆる「おまじない」としておきます。
int main(){
"{"と"}"の間にmain()関数を書きます。main()関数にはプログラムが実行されると
最初に実行される処理を書いておきます。なおintはmain()関数が
終了したときの戻り値が整数であることを示します。戻り値に
ついては後ほど。
cout << "Harou, Keihou" << endl;
coutは画面のことです。endlは改行のことです。そして<<はぶっこむ(?)
という処理です。画面にHarou, Keihouをぶっこみ、Harou, Keihouに
改行をぶっこみます。
つまり改行がぶっこまれたHarou, Keihouを画面にぶっこむので、
Harou, Keihouと表示して改行するという処理になります。
return 0;
returnは関数の終了を意味します。main()関数が終了するということは
プログラムが終了するということです。0は戻り値です。返り値とも言いますが
変換してびっくり!物☆騒なので戻り値と言います。返戻値と言う先生
もいました。プログラムの呼び出し元(この場合はコマンドプロンプト)に
戻り値を渡します。0を渡されるとプログラムが正常終了したと判断し、
それ以外は異常終了と判断するらしいのですが、使い分けたことが
ないのでよく分かりません。
⑧感想とかメモとか
時間かかるし大変でした。処理の内容の説明は余分だったかな・・・
まあ忘れても思い出すのに便利かも?C++としての内容はiostreamに
関することだけなのでやっぱり余分?
C言語のstdio.hも使えるけど、セキュリティ的な問題からC++なら
iostreamを使った方が良いとか何とか・・・
iostreamにnamespace stdが入ってて、stdの中にcoutとかendlとか
が入ってます。
⑨バカ
チルノ
「やると思ったよ・・・」でしょうか?すみませんw2/18追記
set LIBPATH=%PROGRAMFILES%\Microsoft Visual Studio 10.0\VC\LIB;%LIBPATH%
set VSINSTALLDIR=%PROGRAMFILES%\Microsoft Visual Studio 10.0\
set VCINSTALLDIR=%PROGRAMFILES%\Microsoft Visual Studio 10.0\VC\
set DevEnvDir=%PROGRAMFILES%\Microsoft Visual Studio 10.0\Common7\IDE\
set WindowsSdkDir=%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\
このあたりの変数も増えてました。無くてもコンパイルできるけど追記しておきます。
PR