4

実行時に #define の値を設定する方法はあるのだろうか。

以下のコードには、Oracle 固有および Sql Server 固有のクエリがあると想定しています。

#define oracle

// ...    

#if oracle
// some code
#else
// some different code.
#endif
4

3 に答える 3

15

絶対にそうではありません.#definesは、コンパイラがそれを見る前にプリプロセッサによってコンパイルされます-したがって、トークン「oracle」はコード内にさえなく、「1」または「0」だけです。#define をグローバル変数または (より良い) 正しい値を返す関数に変更します。

于 2008-11-07T15:40:44.460 に答える
2

#ifコンパイル時です。ビルド プロセスで (msbuild/csc へのスイッチを介して) これを指定できますが、実際には実行時に指定できません。除外されたコードは存在しません。次のことをお勧めします:

  • 依存性注入/IoC を使用して、バックエンドごとに個別の DAL スタックを用意する
  • いずれかをサポートする ORM ツールを使用する
  • プロバイダーに基づいてコードを分岐する (単一の DAL 内)
于 2008-11-07T15:41:11.743 に答える
0

いいえ、プリプロセッサはコンパイル前に実行され、その時点でコードを変更できます。それがその目的です。実行時に何かに基づいて動作を切り替えたい場合は、変数と通常の条件付きロジックを使用します。

于 2008-11-07T15:41:34.567 に答える