The beast of halfpace

日々のメモ

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  107  : 記事  0  : コメント  396  : トラックバック  31

ニュース

Mozilla Firefox ブラウザ無料ダウンロード

記事カテゴリ

書庫

日記カテゴリ

C#にはプリプロが無いからという話を聞くけど、普段C/C++を使っている身からすると無いのは不便。

こういうことはしちゃいけないんだろうか?

hello.cs


using System;

#define HELLO "Hello, world!"

namespace Hello
{
    class SayHello
    {
        public static void Main(string[] args)
        {
            Console.WriteLine(HELLO);
        }
    }
}


このプログラムをC/C++のコンパイラのプリプロセッサでプリプロセスし、C#のコンパイラでコンパイルすればC/C++と同様にプリプロセッサの恩恵を受けることが出来る。

つまり、

cl /EP hello.cs > hellow.cs

csc hellow.cs

とコンパイルし実行すれば

Hello, world!

と出力される。この方法は勿論Javaでも使用することが出来る。

このような事をしてはいけないんだろうか?

 

仕事ではダメと言われそうだけどw

投稿日時 : 2008年8月15日 23:16

コメント

# re: C#とプリプロセッサー 2008/08/15 23:28 Hirotow
インテリセンス使えない+先頭以外の場所に#defineがあるからエディタが怒るのでダメです。
おとなしくconstやリソースを使うといいです。

# re: C#とプリプロセッサー 2008/08/15 23:38 あんどちん
プリプロで出来ることは単純文字列置換だけってわけじゃないですけど。
#define MAX(a,b) ((a) > (b)) ? a : b
だって出来るし(無論これも文字列置換だけど)。
C#はさっぱりなので知りませんが、こういうのもconstやリソースで出来るならそれでもいいと思います。
そもそもIDE使うことなんて考えてなかったのがダメなのかなぁ


# re: C#とプリプロセッサー 2008/08/15 23:55 アキラ
アンダース(C#設計者)が、マクロは入れない方針だそうで、何回提案されても蹴ってるそうです。

# re: C#とプリプロセッサー 2008/08/16 0:12 Hirotow
そういえばインライン化での最適化とかどうなってるのか少し気になりますね。

# re: C#とプリプロセッサー 2008/08/16 9:24 凪瀬
C/C++のプリプロセッサってJavaみたいな別言語のソースでもプリプロセスできるのか!
構文解析とかはせずに置換とかだけやってるんですかね。

Javaの場合はJavaVM用のバイトコード、C#の場合はCLIを書き出すのが王道だけど、
簡易言語を作るとか、言語の簡易拡張をするならば、JavaやC#のソースを生成して
そこからさらにバイトコード/CLIに落とすというのはアリでしょう。

いずれにせよ、クローズな場所でしかつかえないでしょうし、デメリットも考慮しなくてはなりませんけどね。

# re: C#とプリプロセッサー 2008/08/16 13:52 melt
Javaのソースをプリプロセスするハックは、容量のほとんど入らなかった時代の携帯Javaに重宝しましたねー。

final int Hoge = 0; とか書くと、それ自体がバイトコードに置き換わって容量を取るので、代わりに #define Hoge 0 とか書いてました。

あと、
int a;
int b;
...
とか複数の変数があっても容量を取るので、変数は出来る限り int にして、
int[] v = new int[100];
#define v[0] a
#define v[1] b
...
とか書いてましたねー。

もちろんクラスをバンバン作ると容量をすぐにあふれちゃうので、1つのクラスに処理を全部詰め込む感じでした。
極力関数も作らず、短い処理ならマクロにしてしまったりとかも……。

古い時代のバッドノウハウですw

# re: C#とプリプロセッサー 2008/08/16 19:06 なちゃ
まあそういうのは入れない思想ですけど、FILEとLINEの定義とかは欲しかったり。
まあそれ言い出すと型名やメソッド名とかまで欲しくなって収拾つかなくなるのですが。


# re: C#とプリプロセッサー 2008/08/17 18:10 あんどちん
> アンダース(C#設計者)が、マクロは入れない方針だそうで、何回提案されても蹴ってるそうです。
正当な理由があってそうしているんでしょうが、それだけ聞くと
「いやぁねぇ、頭でっかちの人って。」
と思っちゃう。


> そういえばインライン化での最適化とかどうなってるのか少し気になりますね。
定数式ならコンパイル時計算で済んじゃうでしょうね。


> C/C++のプリプロセッサってJavaみたいな別言語のソースでもプリプロセスできるのか!
> 構文解析とかはせずに置換とかだけやってるんですかね。
Yes, 構文解析はパーサーのお仕事です。

> Javaのソースをプリプロセスするハックは、容量のほとんど入らなかった時代の携帯Javaに重宝しましたねー。
ナカーマ!ってかやっぱり同じ事考える人はどこにでもいるんだ。

> まあそれ言い出すと型名やメソッド名とかまで欲しくなって収拾つかなくなるのですが。
プリプロセッサーではそこまでは無理ですね。C99だと関数名を取得できるマクロが追加されていた思いますが。




Post Feedback

タイトル
名前
Url:
コメント: