2016-10-20 2 views
1

C#では、プリプロセッサディレクティブが実際のコンパイルの前にプリプロセスされた命令の場合、なぜこのプログラムでは最初に実行されないのですか? C#のプリプロセッサディレクティブ

static void Main(string[] args) 
     { 
      Program1.display(); 
      Program2 p2 = new Program2(); 
      p2.show(); 
#if DEBUG 
Console.WriteLine("DEBUG from preprocessor directive is working!"); 
#endif 
     } 

予想される出力:

​​

しかし、実際の出力:

.......(from display()) 
.......(from show()) 
DEBUG from preprocessor directive is working! 
+0

ただし、コードは行ごとに実行されます –

+4

プリプロセッサディレクティブは、プログラムのコンパイル方法に関する*コンパイラへの指示です。彼らはコード実行命令には関係しません。 –

答えて

1

C#言語仕様、Section2.5

前処理ディレクティブは能力を提供条件付きで をスキップするソースファイルのセクション、エラーと警告の状態を報告するため、 とソースコードの異なる領域を区切るために使用します。 「前処理指令」という用語は、C およびC++プログラミング言語との整合性のためにのみ使用されています。 C#では、前処理ステップが別途に用意されていません。前処理指令を一部として処理されている字句解析フェーズの


前処理ディレクティブは、トークンはないとC#の 構文文法の一部ではありません。しかし、前処理ディレクティブは、トークンの配列を含むか除外する を使用することができ、そのようにあなたが期待している出力が間違っているC#のプログラムの意味

4

に影響を与える することができます。

(コンパイルする)処理されたコードDEBUGモード/構成で(コンパイルする)処理さ

static void Main(string[] args) 
{ 
    Program1.display(); 
    Program2 p2 = new Program2(); 
    p2.show(); 
    Console.WriteLine("DEBUG from preprocessor directive is working!"); 
} 

コード - DEBUGモード/設定

static void Main(string[] args) 
{ 
    Program1.display(); 
    Program2 p2 = new Program2(); 
    p2.show(); 
} 

・ホープこれはあなたをクリアプリプロセッサは実行順序を決定しないという混乱があります。

関連する問題