有没有办法在运行时设置#define 的值?

发布于 2024-07-08 17:17:19 字数 200 浏览 4 评论 0原文

我想知道是否有办法在运行时设置#define 的值。

我假设下面的代码中有针对 Oracle 特定和 Sql Server 特定的查询。

#define oracle

// ...    

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

I wonder if there is a way to set the value of #define in run time.

I assume that there is a query for Oracle specific and Sql Server specific at the code below.

#define oracle

// ...    

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

赠佳期 2024-07-15 17:17:19

绝对不是,#defines 是在编译器看到它之前就由预处理器编译出来的 - 因此标记“oracle”甚至不在您的代码中,只是“1”或“0”。 将 #define 更改为全局变量或(更好)返回正确值的函数。

Absolutely not, #defines are compiled out by the preprocessor before the compiler even sees it - so the token 'oracle' isn't even in your code, just '1' or '0'. Change the #define to a global variable or (better) a function that returns the correct value.

与之呼应 2024-07-15 17:17:19

#if 是编译时的。 您可以在构建过程中指定这一点(通过切换到 msbuild/csc),但实际上不是在运行时指定。 排除的代码不存在。 最好建议您(其中之一):

  • 使用依赖注入/IoC,为每个后端建立单独的 DAL 堆栈
  • 的 ORM 工具
  • 使用支持基于提供者的代码分支(在单个 DAL 中)

#if is compile-time. You could specify this in your build process (via switches to msbuild/csc), but not really at runtime. The excluded code doesn't exist. You might be better advised to (1 of):

  • Have separate DAL stacks for each back-end, using Dependency Injection / IoC
  • Use an ORM tool that supports either
  • Branch the code based n the provider (in a single DAL)
折戟 2024-07-15 17:17:19

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

No, the preprocessor runs before compile and can alter code at that time, that is its purpose, if you want to switch behavior based on something at runtime use a variable and normal conditional logic.

扮仙女 2024-07-15 17:17:19

完整说明:这些针对 OpenCL 的优化幻灯片意味着在第 11 页,这是可能的,但请注意,作者似乎将“运行时”解释为船体程序的运行时。 从这个意义上说,内核(每个 GPU 线程的小程序)是“在运行时编译的”。

To be complete: These optimization slides for OpenCL imply at page 11 that it is possible, but note that the author seems to interpret "runtime" as the hull program's runtime. In this sense, the kernels (small programs for each GPU thread) are "compiled at runtime".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文