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),但不是在运行时指定。排除的代码不存在。您可能会更好地建议 (1 of):

  • 使用依赖注入/IoC 为每个后端提供单独的 DAL 堆栈
  • 使用支持任一的 ORM 工具
  • 基于提供者的代码分支(在单个 DAL 中)
于 2008-11-07T15:41:11.743 回答
0

不,预处理器在编译之前运行并且可以在那个时候改变代码,这就是它的目的,如果你想在运行时根据某些东西切换行为,请使用变量和正常的条件逻辑。

于 2008-11-07T15:41:34.567 回答