読者です 読者をやめる 読者になる 読者になる

C++の勉強その1

雑記 ゲーム開発 C++

 早速。C++の勉強を始めている。

 手始めにゲーム制作の本を1冊購入した。C++のシンタックスはよく知らないがC系出しどうにかなるだろうとC++のリファレンス本にはまったく目を通さず、この1冊を選んだ。

ゲームプログラマになる前に覚えておきたい技術

ゲームプログラマになる前に覚えておきたい技術

 最初の30ページほどを読んで、語り口はまったく分かりやすいがC++のシンタックスや独自の機能でひっかかり読むのに時間がかかるため、一旦通読を中断した。僕の知識不足に加え、著者の平山 尚氏によるサンプルコードが汚いというか初学者向けで無い書き方が多いため、理解が一層困難になる。この汚いコードについては著者も本書内でエクスキューズしているが、そのエクスキューズの文章を分かりやすい変数名や分岐を書くのに割り当てたらどうだろうかと思った。ゲーム業界のプログラマにそういうスタイルの人が多そうなのは、彼の文章からなんとなく想起出来たが。私の出来が悪いのが理由ではあるのだが、私はコードに関しては出来るだけ保守と可読性が高いものが好きだ。


 というわけで、一旦お休みして「ロベールのC++教室」というサイトでざっとC++を学んで、特殊な部分についてはリファレンスをあさった後、平山氏の本通読に戻る事にする。

ロベールのC++教室

 ロベール先生の文章は大変分かりやすいし、コードも初学者向けに砕いて書いているので大変ありがたい。無料で公開してくれているのもありがたい。新しい言語をさわるのに初めて本やリファレンスを毎回買うのはそろそろ避けたかった。節約節約。

 ロベール先生のページは要点を先に書いてくれているので他言語経験がある私は時間の節約も出来て大変助かる。


 さて、件のサイトで学習しながら、そろそろサンプルコードを実際に走らせてみたいと思った。Macで。

 OSXでC++環境を構築するにはXCodeを入れてさらに「コマンドラインデベロッパツール」なるものにGCC(Cコンパイラ)が入っているということなので、それらを順次入れていく。

// Input1.cpp
#include <iostream.h>

int main()
{
    int a;

    cout << "何か値を入れてね > ";
    cin >> a;

    cout << "その数を3で割った余りは" 
         << a % 3 << " です。" << endl;

    return 0;
}

 こんなコードをロベール先生のページから引っ張ってきてmacで走らせてみるがコンパイルエラー。iostream.hが無い、とのこと。ちょっと検索して

// Input1.cpp
#include <iostream>

 ヘッダファイルiostreamの.h拡張子を取るとそこのエラーは解除された。.hがどのような経緯で要らなくなったのかは不明。OSX特有のものか、歴史的なものか。追って知る事もあるだろうけど今は深掘りせず。

$ g++ test.cpp
test.cpp:6:5: error: use of undeclared identifier 'cout'; did you mean 'std::cout'?

残りのエラー。関数の名前空間に関するエラー。これも歴史的なものなのかOSX特有のものなのか知らないが、各関数にstd::の名前空間を追記した。最終的にOSXでコンパイルが通ったコードは以下のとおり。

// Input1.cpp
#include <iostream>
int main()
{
    int a;
    std::cout << "何か値を入れてね > ";
    std::cin >> a;
    std::cout << "その数を3で割った余りは" 
         << a % 3 << " です。" << std::endl;

}

 平山氏の書籍には「using namespcae std」宣言で標準クラスの名前空間を取り込むべし、と書いてあったが他を調べると「いやいや標準クラスも例外無く名前空間は取り込まねー」という派閥もあった。私は初学者なので省略しないように、標準クラスだろうと名前空間は取り込まないこととした。