タグ

ブックマーク / dechimal.hatenadiary.com (2)

  • プリプロセッサでループしましょう! - デ-mk6

    みなさんいかがお過ごしでしょうか?前回は足し算しました。今回はループです。 足し算ではとにかくいっぱいPP_ADD_Iを並べましたが、もっとスタイリッシュに書きたいですね。書きましょう。 まずC/C++のループはこんな感じです: while (condition) { ... } forはwhileの便利記法なので、whileさえあればfor相当のものは作れます。逆も言えますが。conditionはループの判定式です。{ ... }は繰り返したい処理です。 conditionはただの変数に見えますが、別にこれはf(g(h(n)))とか、i < 3とかそういうのでもいいです。とにかく何か式です。 ちょっと困りました。whileは構文です。関数じゃありません。どうしましょう。こうしましょう。 while(p, f, v) = while'(p, f, while'(p, f,...while'

    プリプロセッサでループしましょう! - デ-mk6
    terazzo
    terazzo 2009/06/27
  • プリプロセッサで足し算しましょう! - デ-mk6

    プリプロセッサは所詮文字列置換、計算なんてできやしない…そう思っている方は多いでしょう。しかしそれは違います。計算できます。 日の目的はプリプロセッサで足し算です。ADD(3, 2)と書けば5と答えてくれる関数マクロを作ってみましょう。 おっと、#define ADD(m, n) ((m) + (n)) とかではありません。これで足し算をするのは誰か、それはコンパイル・実行したときの処理系です。 今日の目的はあくまでも、プリプロセッサという処理系に閉じた足し算を定義することです。言い換えればプリプロセスが終わった時点で結果がでていないといけません。あとなんか細かいことはある感じがしますが、もうめんどいので早速始めましょう。 まずプリプロセッサにおける数を取り決めておきます。数とは、数字のみで構成されたトークンのことです。数字とは、トークンとは何かなどはめんどいので常識的に考えてください。

    プリプロセッサで足し算しましょう! - デ-mk6
    terazzo
    terazzo 2009/06/24
  • 1