2012年4月9日月曜日

「ゲーム開発環境勉強会@関西」 に参加してきました

4/8(金) に行われました「ゲーム開発環境勉強会@関西」に参加してきました。

今回ははじめに GDC2011 での自動テストのラウンドテーブルの内容紹介から始まり、
後半は GDC2011 のトピックの中から数個議題を取り上げ、3グループに別れてラウンドテーブルをしました。

ラウンドテーブルが初めてで最初戸惑いもありましたが、活発な話し合いができたと思います。
普段会社でやっていることが他の会社ではどうなのか、~ということを試してみたけどどうだったとか、
メリット・デメリット、こんな事に悩んでいるとか。etc...

自分が参加したテーブルでは、Jenkins を主軸に、導入してどうだったかとか静的解析のこととか、自動化に関係する部分での話が活発にでました。
振り返ってみて、普段から Jenkins を使っている身としてはメリット・デメリットがあんまりうまく伝えられなかったかなぁと思いました。実際使っていてメリットはものすごく感じてはいるのですが、いざそれを説明しようとなるとうまく纏められず。。。
伝える力って大事ですよね。

まぁ、でも Jenkins 自体は簡単なので一度試してみると良いと思います。
Jenkins 日本語 Wiki
Jenkins Advent Calender 2011


他のテーブルはテストの話をがっつりとしたようです。そちらの話も気になりますね。
まとめ
勉強会とかラウンドテーブルとか数を重ねてより良いものになると思うので、今後も機会があればドンドン参加していきたいと思います。
以上、まとめ。

2012年4月6日金曜日

C で main の前に関数コール

C言語のテストフレームワークを書いていて知ったこと。

C言語版のテストフレームワークでも、Google Test のようにテストの登録をいちいちしなくていいインターフェイスを目指していました。

それを実現するためには、どうしても main 関数が呼ばれる前に関数を呼ぶ必要がありました。
C++ なら、
int dummy = func();
int main()
{
    return 0;
}
とか、コンストラクタとか使う方法があったのですが、
C だと、上の方法が使えず。(いけると思っていたのでガッカリ)
もちろんコンストラクタなどないので、どうしたもんかという状態でした。

__attribute__((constructor))
Google 先生に聞いてみると __attribute__((constructor)) ってのがヒット。

これだ!えいや!できたー!!

あ、でもコレ GCC でないとダメじゃん。

あきらめるのはまだ早い
gcc には __attribute__((constructor)) というものがあるが、
Visual Studio ではどうしたらいいの?という事で、Google で検索してみると以下の記事がヒットしました。
http://stackoverflow.com/questions/1113409/attribute-constructor-equivalent-in-vc

まんま答えがありました。 CRT$XCU を使うようです。

CRT のグローバル初期化にぶち込むってことですかね。
MSDNにも説明がありました。

こちらも問題なく動作しました。
とりあえず、Visual Studio と GCC で使えれば個人的に満足なので、他の環境は考えないことにする。

C言語テストフレームワークとしての iutest
branche で作業してますので、良かったら見てください。

今のところ、以下のような感じでテストが書けるようになりました。
#include "iutest_c.h"

IUTEST_C_WORKSPACE(); // ワークの構築用に必要...

int main(int argc, char* argv[])
{
    iuInitIrisUnitTest(&argc, argv);
    return IUTEST_RUN_ALL_TESTS();
}

IUTEST(AssertionTest, Simple)
{
    IUTEST_ASSERT_EQ(0, 0);
    IUTEST_ASSERT_NE(0, 1);
    IUTEST_ASSERT_LE(1, 1);
    IUTEST_ASSERT_LT(0, 1);
    IUTEST_ASSERT_GE(1, 1);
    IUTEST_ASSERT_GT(1, 0);
}

2012年4月1日日曜日

エイプリルフールなので遊んでみた

エイプリルフールということで少し遊んでみました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// 
        /// アプリケーションのメイン エントリ ポイントです。
        /// 
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form());
        }
    }
}

C# のよくあるコードです。
こちらのコードを C++ でビルドできるようにしてみました。

プログラムのダウンロードはこちらから。
MD5 : 443fb06d8e8f44c5066e9c9b7fd50cd8

[STAThread] をなんとかできなかったのが残念。