ルギア君の戯言

雑多な記事。

第4章 箱の中身とメタグロスの怒り

ルギア君ディアルガは箱をキノガッサのところに持っていった。


キノガッサ「ありがとう。中身を見てみますね。」


そういって、キノガッサは魔法を唱えた。


キノガッサ, −−, . (ファギクンジェルバ、フォーディーンジェニー、ギクンメケボセ)」


すると、箱がひっくり返って、中に入っていたリンゴがテーブルの上に散らばった。


キノガッサ「6個かぁ・・・たりるかなぁ・・・? まあ、いいや。ありがとう。足りなかったらまたお願いする。*1


ルギア君たちは研究室に戻っていった。


リザード「次は何の魔法を教えてあげようかな。うーん、・・・どうしようか。」
メタグロス*2「魔法はいったん終わりにするのか?」
ルギア君「うん。」
メタグロス「だったら、終わりにする魔法も言ってくれ!」
リザード「ああ、そうだ! 忘れてた! 僕自身は魔法が唱えられないから、魔法のことはよく頭から抜けちゃうんでね・・・」
ルギア君「早く教えてよ!」
リザード「えーっと、これだ! 唱えてみな。」
ルギア君− . (ギッジョーン リーゲ)」
メタグロス「うむ。よろしい。始めと終わりをはっきりさせるのが、この城のマナーだからな。覚えておけよ。」
ルギア君「はい。」

まとめ

キノガッサが使った魔法を使うと、箱の中身を見ることができます。
こう書きます。

    printf("%d\n", apple_box);

これは、[apple_box]の中身を(最初の) %d に埋め込んだ、"6\n" を画面に表示する魔法です。
*3


\n は「改行」を意味します*4


"%d\n" はそうではないといけないということはないです。
たとえば、

    printf("Hello, World!\n");

と書けば、

Hello, World!

と表示されます。
また、

    printf("%d\n%d\n%d\n", apple_box, apple_box, apple_box);

と書けば、

6
6
6

と表示されます。


%d の数と 埋め込む箱の数 (この場合[apple_box])は同じにします。
箱の数が多い分には問題ありませんが、少ないとおかしなことになりますので注意しましょう。



前回作成したプログラムは一見正常に修了したように見えますが、きっと、メタグロスは怒っていることでしょう。

    return 0;

これを、プログラムの最後に書くことで「魔法はこれで終わり」っていうのを示すことができます。


ちなみに、0 を 1 にすると、「魔法はこれで終わりだけど、実行中に何か問題があった」っていうことをメタグロスに伝えることができます。しかし、メタグロスにしてみれば「あっそう・・・」なので、見かけ上、何も変わりません。


というわけで、今回できたプログラムは


<Sample01-002.c>

int main(void) {
    int apple_box;
    apple_box = 6;
    printf("%d\n", apple_box);
    return 0;
}


となります。


では、コンパイルの方法です。
次からは同じ方法なので、覚えてください。
Linux は今回も前回と同じ方法でできますので省略します。


以下は Windows での説明です。


Visual C++ 2005 を起動します。


[ファイル]→[新規作成]→[新しいプロジェクト]
「新しいプロジェクト」ダイアログが出てきます。


以下のように入力して、[OK]をクリックしてください。
[プロジェクトの種類]→[Visual C++]または[Win32]
[テンプレート]→[Win32 コンソールプロジェクト]
[プロジェクト名]→[Sample01-002] (次からはここを変えてください。)
[ソリューションのディレクトリを作成]のチェックをはずす
[場所]→[参照]→[C_Study]をダブルクリック→[開く]


そうすると、「Win32 アプリケーションウィザード」が出てきます。
[アプリケーションの設定]→[追加のオプション]→[空のプロジェクト]にチェックをつける
その後、[完了]をクリック。


「ソリューションエクスプローラ」の[ソースファイル]を右クリック→[追加]→[新しい項目]


すると、「新しい項目」ダイアログが出てきます。
以下のように入力して、[追加]をクリックしてください。


[カテゴリ]→[Visual C++]または[コード]
[テンプレート]→[C++ ソースコード (.cpp)]
[ファイル名]→[Sample01-002.c] (次からはここを変えてください。)


ビルドの手順は同じなので省略します。


ところが、ビルドすると、このようなメッセージが出てきます。

warning C4013: 関数 'printf' は定義されていません。int 型の値を返す外部関数と見なします。


この理由は次の章で解説します。


しかしながら、よくみると、「正常終了」になっています。
ということは実行することができます。


実行するときは今回から「デバッグ開始」ではなく「デバッグなしで開始」を使います。
実行してみると、たしかに、6 と表示されていますが、やはり、先ほどの warning が気になります。


参考までに、gcc では warning は表示されません。
実行結果も正常です。
gcc で warning が表示されないのにはわけがあります。


それも、次の章で。


それでは、また今度。

*1:どれだけ作る気だw

*2:以降、メタグロスについては「の声」は省略

*3:円記号とバックスラッシュ(逆方向スラッシュ)は同じものです。フォントによって見え方が変わります(日本語用のフォントはたいてい円記号、英語用のフォントはたいていバックスラッシュ)。なので、ブラウザと、テキストエディタの見え方が違っていても同じですのでご注意ください。

*4:→第 未定 章  の研究