C#の#if、#elif、#else、#endifなどの条件コンパイル記号(転載)
これらはC#の条件付きコンパイル記号です.これらの命令は私がプロジェクトで出会ったことがあります.ネットを調べて、人に聞いたことがあります(もちろん、牛も牛も知らないので、収穫はありません).今日は資料をめくって、この方面に言及したものがあるので、この文章を見ることができる人と一緒に勉強します.
C#のdefine前処理命令では置換定数を定義できません.この命令は、条件コンパイルに使用されるシンボルのみを定義し、#if、#elif、#elseおよび#endifに使用されます.
ソースファイルは、コンパイルする前にファイル処理を1回行います.これはプリプロセッサによって行われます.このファイル処理は、ソースファイルのみをテキスト処理し、コンパイル動作を行わない.すべての前処理命令は「#」記号で始まる.
前処理は以下の命令を識別し、以下の命令を識別する.
#if#elif#else#endifコマンドは、#defineコマンドを使用して、プリプロセッサに元のコードの変更を指示するシンボルの動作を定義することができます.次に、条件を使用してコンパイルした例を示します.
vsを使用すると、開発環境ではコンパイルされていないコードがグレー表示されます.シンボル定数はusing命令の前に定義する必要があります.
補足:
#ifでは、条件コマンドを開始し、1つ以上のシンボルをテストしてtrueとして計算されているかどうかを確認できます.それらの計算結果がtrueである場合、コンパイラは#ifと最近の#endif命令の間にあるすべてのコードを計算します.たとえば、
このコードは通常のようにコンパイルされますが、debugプロファイルを読み込むには#if句に含まれます.この行のコードは、前の#defineコマンドでシンボルDEBUGが定義されている場合にのみ実行されます.コンパイラが#if文に遭遇すると、関連する記号が存在するかどうかを確認し、記号が存在する場合は#ifブロックのコードのみをコンパイルします.そうでない場合、コンパイラは一致するendifコマンドに遭遇するまで、すべてのコードを無視します.デバッグ時に符号DEBUGを定義し、異なるデバッグ関連コードを#if句に入れるのが一般的です.デバッグが完了したら、#define文をコメントすると、すべてのデバッグコードが奇跡的に消え、実行可能ファイルも小さくなり、エンドユーザーはこれらのデバッグ情報に混乱しません(明らかに、より多くのテストを行い、コードがDEBUGを定義していない場合でも動作することを確保します).この技術はCとC++プログラミングにおいて非常に一般的であり,条件コンパイル(conditional compilation)と呼ばれている.
参考文献:
C#の#if、#elif、#else、#endifなどの条件コンパイル記号
C##if,#elif,#elseおよび#endif前処理命令
転載先:https://www.cnblogs.com/OpenCoder/p/9827095.html
C#のdefine前処理命令では置換定数を定義できません.この命令は、条件コンパイルに使用されるシンボルのみを定義し、#if、#elif、#elseおよび#endifに使用されます.
ソースファイルは、コンパイルする前にファイル処理を1回行います.これはプリプロセッサによって行われます.このファイル処理は、ソースファイルのみをテキスト処理し、コンパイル動作を行わない.すべての前処理命令は「#」記号で始まる.
前処理は以下の命令を識別し、以下の命令を識別する.
#define #undef #if #elif #else #endif #error #warning #line #region #endregion
#pragma warning disable #pragma warning restore
#if#elif#else#endifコマンドは、#defineコマンドを使用して、プリプロセッサに元のコードの変更を指示するシンボルの動作を定義することができます.次に、条件を使用してコンパイルした例を示します.
#define MACRO1
using System;
public class Program
{
public static void Main()
{
#if (MACRO1)
console.writeline("MACRO1 is defined.");
#elif (MACRO2)
console.writeline("MACRO2 is defined and MACRO1 is not defined");
#else
console.writeline("MACRO2 and MACRO1 are both defined");
#endif
}
}
vsを使用すると、開発環境ではコンパイルされていないコードがグレー表示されます.シンボル定数はusing命令の前に定義する必要があります.
補足:
#ifでは、条件コマンドを開始し、1つ以上のシンボルをテストしてtrueとして計算されているかどうかを確認できます.それらの計算結果がtrueである場合、コンパイラは#ifと最近の#endif命令の間にあるすべてのコードを計算します.たとえば、
#if DEBUG
string file = root + "/conf_debug.xml";
#else
string file = root + "/conf.xml";
#endif
このコードは通常のようにコンパイルされますが、debugプロファイルを読み込むには#if句に含まれます.この行のコードは、前の#defineコマンドでシンボルDEBUGが定義されている場合にのみ実行されます.コンパイラが#if文に遭遇すると、関連する記号が存在するかどうかを確認し、記号が存在する場合は#ifブロックのコードのみをコンパイルします.そうでない場合、コンパイラは一致するendifコマンドに遭遇するまで、すべてのコードを無視します.デバッグ時に符号DEBUGを定義し、異なるデバッグ関連コードを#if句に入れるのが一般的です.デバッグが完了したら、#define文をコメントすると、すべてのデバッグコードが奇跡的に消え、実行可能ファイルも小さくなり、エンドユーザーはこれらのデバッグ情報に混乱しません(明らかに、より多くのテストを行い、コードがDEBUGを定義していない場合でも動作することを確保します).この技術はCとC++プログラミングにおいて非常に一般的であり,条件コンパイル(conditional compilation)と呼ばれている.
参考文献:
C#の#if、#elif、#else、#endifなどの条件コンパイル記号
C##if,#elif,#elseおよび#endif前処理命令
転載先:https://www.cnblogs.com/OpenCoder/p/9827095.html