実行時に #define の値を設定する方法はあるのだろうか。
以下のコードには、Oracle 固有および Sql Server 固有のクエリがあると想定しています。
#define oracle
// ...
#if oracle
// some code
#else
// some different code.
#endif
実行時に #define の値を設定する方法はあるのだろうか。
以下のコードには、Oracle 固有および Sql Server 固有のクエリがあると想定しています。
#define oracle
// ...
#if oracle
// some code
#else
// some different code.
#endif
絶対にそうではありません.#definesは、コンパイラがそれを見る前にプリプロセッサによってコンパイルされます-したがって、トークン「oracle」はコード内にさえなく、「1」または「0」だけです。#define をグローバル変数または (より良い) 正しい値を返す関数に変更します。
#if
コンパイル時です。ビルド プロセスで (msbuild/csc へのスイッチを介して) これを指定できますが、実際には実行時に指定できません。除外されたコードは存在しません。次のことをお勧めします:
いいえ、プリプロセッサはコンパイル前に実行され、その時点でコードを変更できます。それがその目的です。実行時に何かに基づいて動作を切り替えたい場合は、変数と通常の条件付きロジックを使用します。