C|1月25日のコーディング

 今日は2時間位Cを弄りました。以前C#で書いた迷路生成プログラムの移植なのですが、やっと一通り書けました。コンパイルも通りました。でも、実行時にエラーが出ます。アクセス違反だそうです。

 VC++のIDEでブレークポイント設定してステップ実行してポインターとかウォッチしようかなと思ってmain関数の1行目にブレークポイント設定してもやっぱりアクセス違反で落ちます。逆アセンブルしたコードとか見せられてもちっとも有難くないです。読めません。日本語でおk。

 やっぱり挫けそうです…orz

 ふてくされてC#でこんなコード書いて遊んでました。どう書く?で何回か素数を使うことがあったんで、また使う機会があるかもとクラスにしてみるテスト。

using System;
using System.Collections.Generic;
public class Prime {
  static public IEnumerable<int> GetPrimes() {
    yield return 2;
    for(int i = 3; i <= int.MaxValue; i += 2) {
      if(IsPrime(i)) yield return i;
    }
  }
  static public bool IsPrime(int value) {
    for(int i = 2; i < value; i++) {
      if(value % i == 0) {
        return false;
      }
    }
    return true;
  }
}

 へっへっへー、Cじゃこんなこと出来ないだろー。C#可愛いよC#。

 明日もちょっとCを弄ろうと思います。

C#|どう書く?org必ず解ける迷路2

 グッと高速化。初めてStack<T>なるものを使ってみました。再帰で書くときの履歴に便利ねぇと思いながら書いたら、あっさりとスタックオーバーフローorz起こしたんでループで書き直しました。

 一度再帰で書いたのを最小限の変更でループに直してるので多少エレガントじゃない部分があると思います。

http://ja.doukaku.org/comment/5374/

 C#って何も考えずに楽して書いたら遅いけど、パフォーマンスを意識して書けばC++と遜色ないんですね。

C#|どう書く?org コラッツ・角谷の問題

こんなことをして、

http://ja.doukaku.org/comment/5093/

さらにC++のコードのC#への移植に挑戦しました。

http://ja.doukaku.org/comment/5113/

VC#のエディタにC++のコードをペーストしてエラーを潰すだけです。(そんなんでいいのか…)

WisdomSoftのC++入門読んでおいて良かったです。殆ど頭に入ってませんが…。

C#|System.Windows.Formsを使わないWindowsアプリ

 ふと、System.Windows.Formsを参照せずにWin32APIのみでウィンドウズアプリ作れないかな?と思いました。

 メッセージボックスを表示する辺りまでは余裕で出来たのですが、ウィンドウを表示してメインループを回すまでは出来ませんでした。ギブアップです。

 Win32APIとC#の型の対応がさっぱりわけわかめです。MSDN漁ってもまとまった資料は見付かりません。プラットフォームSDKのヘッダファイルを見れば簡単に分かるらしいのですが、先日ハードディスクの容量節約の為にVC++ Express Editionもろともアンインスコしちゃいました。

 4時間程格闘して、

『Win32API使うなら素直にC++で書いた方が楽そう』

と思いました。でも、C++って何でこんなにも主流なんでしょう?低水準に近いCを無理やり抽象化してオブジェクト指向にした様な強い違和感があります。

 入門サイトを読んで、書いてあることは理解出来るのですが、じゃぁ書けるか?と言ったら絶対無理です。C++でウィンドウズアプリをゴリゴリと書ける人の脳内を覗いてみたいです。

 そうそう、Win32APIを片っ端からDllImportしまくった.NETのクラスライブラリとかあったら欲しいです。