過去の投稿記事 new!
・【画像】漫画でわかる外国人参政権
・東京電力のHPで停電状態が確認できたり(サービス再開!)
・戦国時代 ~ 江戸時代の徳川家康が熱かった
・vaio のバッテリは寿命が短いような気がする
・話題の Western Digital 製 WD20EARS を購入した
・C01LC をビックカメラで買ってきた
・2025年には空中都市が現実化?!
・【動画】わかりやすい「宇宙ひも理論」
・今世紀には「富士山噴火」「東海連動地震」「首都圏直下型地震」か?
・滅びた町、南浜町が Googleストリートビューで見れる

【 amazon 送料無料キャンペーン 】

バックリンクはご自由にどうぞ!     http://mfsocket.blogspot.com/feeds/posts/default?alt=rss リンク集 / ログイン

2011/01/14
こんな #define があったら面白いかも

 
#define を定義できる #define があったら面白そう。
 
 
何を言っているかわからないと思うので、例えばの話をしてみる。
 
拡張 #define として #define_var というキーワードがあるとする。これは、
特定のスコープの間だけ有効な #define を定義することができる。
 
例として、秀丸マクロを C言語風に使えたり出来る。
 

#define_var    string( a )    $$a
#define_var    int( a )    ##a
#define method( a )            call    a
#define method( a, b )        call    a, b
#define method( a, b, c )    call    a, b, c
#define main()
#define void
#define function( a )    a:

void    main(){
    int(a);           // 秀丸マクロの int 型を定義。以降 a へのアクセスは ##a に
    string(b);      // 秀丸マクロの string を定義。上記と同じ。

    a = 100;
    b = "ほげ";

    method( func );

} // 対応スコープを抜けることで int(a), string(b) の拡張定義は #undef される

void    function( func ){
    {

          int(a);      // 先ほど自動で #undef されたのでまた宣言できる
          string(b);

    } // #undef される

    int(a);      // 先ほど自動で #undef されたのでまた宣言できる
    string(b); 
    return;
}

 
 
けっこう、C言語っぽくないですか?
 
上記にプリプロセス通した後の、生の秀丸マクロソースは以下のようになります。
 

{
    ##a;
    $$b;

    ##a = 100;
    $$b = "ほげ";

    call func;

}

func:
{
    {

        ##a;
        $$b;

    }

    ##a;
    $$b;
    return;
}

 
アイデアとして面白かったら、自作のプリプロセッサに搭載してみよう。
 
バーチャルマシンや独自言語を実装する人向けに、C++ コンパイラ標準の
プリプロセッサを一部大きく上回る?仕様で作成しており、このようなキーワード
があれば、どんな言語でも移植性が非常に高まるのではないかと思ってます。
 
または以下のように、特定のキーワードが出た次の単語に対して自動で追加する
というのも面白いですね。
 
   #define_var_add   int  ##
   #define_var_add   string  $$
 
int a = 100; 
string b = "aa";
 
    ↓ プリプロセス後
 
##a = 100;
$$b  = "aa";
 
Doja/Star/MIDP/Android などで共通のラッパーを実装する上で、また機種依存を
対策する上でもプリプロセッサは絶対必要と考える自分は邪道だろうか。
 
Eclipse の良さは最近になってようやく納得してきたのですが、プリプロセッサを
必要とするレベルの開発ではキツイ。
 
数年前 Eclipse を使っていないというだけで、中途面接で非常に叩かれたことが
1回だけあったり。正確にはプリプロセッサではないけど enum{} 使えないのは
めんどくさくないんだろうか。

0 コメント:

  • コメントには <b>, <strong>, <em>, <i>, <a> など一部の HTML タグを使用できます。