问题标签 [conditional-compilation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
1357 浏览

unit-testing - 条件编译是单元测试的有效模拟/存根策略吗?

在最近关于存根的问题中,许多答案建议使用 C# 接口或委托来实现存根,但一个答案建议使用条件编译,在生产代码中保留静态绑定。这个答案在阅读时被修改为 -2,所以至少有 2 人真的认为这是一个错误的答案。原因可能是误用 DEBUG,或者可能是使用固定值而不是更广泛的验证。但我不禁想知道:

使用条件编译是实现单元测试存根的一种不合适的技术吗?有时?总是?

谢谢。

编辑添加: 我想添加一个示例作为实验:

比较

这允许通过 C# 接口对“DateTime.Now”的传出依赖项进行存根。但是,我们现在添加了一个动态调度调用,其中静态就足够了,即使在生产版本中对象也更大,并且我们为 Foo 的构造函数添加了一个新的失败路径(分配可能会失败)。

我在这里什么都不担心吗?感谢您迄今为止的反馈!

0 投票
8 回答
496 浏览

c++ - 仅包括操作系统上的某些库

在编写一个想要在 mac、linux 和 windows 上编译的应用程序时,管理需要包含在各种操作系统中的不同库的最佳方法是什么。例如,使用 glut opengl 工具包需要在每个操作系统上使用不同的包含。

0 投票
16 回答
176050 浏览

c - 如何使用预处理器指令检查操作系统?

我需要我的代码根据编译它的操作系统来做不同的事情。我正在寻找这样的东西:

有没有办法做到这一点?有没有更好的方法来做同样的事情?

0 投票
3 回答
33199 浏览

ios - 为 iPhone 编译时 Xcode 设置了什么#defines

我正在编写一些半便携式代码,并希望能够检测我何时为 iPhone 编译。所以我想要类似的东西#ifdef IPHONE_SDK...

大概Xcode定义了一些东西,但我在项目属性下看不到任何东西,谷歌也没有太大帮助。

0 投票
8 回答
930 浏览

c# - .Net 中是否可以仅从客户端程序集的调试版本中调用某些代码?

我正在编写一个(非常小的)框架来检查方法的前置条件和后置条件。入口点是(它们很容易成为方法;没关系):

显然,当方法没有问题时,检查后置条件可能会很昂贵,而且实际上并不是必需的。所以我想要一个像这样工作的方法:

whereConditionalCallingCodeAttribute意味着这个方法应该只在调用代码用定义的 DEBUG 符号编译时运行。这可能吗?

我希望客户端代码如下所示:

当然,我可以不提供WhileDebuggingThat。然后客户端代码将如下所示:

如果没有其他办法,这是后备计划,但它非常严重地破坏了 DRY。

据我了解,标记WhileDebuggingThatwith[Conditional("DEBUG")]将发出(或不发出)此方法,具体取决于在库编译期间是否定义了 DEBUG,而不是引用该库的程序集。所以我可以这样做,然后编写文档告诉库用户将其代码的调试版本与库的调试版本链接起来,并将发布版本与发布版本联系起来。这对我来说并不是最好的解决方案。

最后,我可以告诉图书馆用户在他们的项目中定义这个类:

据我所知,这应该也可以,但仍然需要打破 DRY 原则,即使只是轻微的。

0 投票
5 回答
9496 浏览

c# - 条件编译取决于 C# 中的框架版本

是否有任何预处理器符号允许类似

或其他方式来做到这一点?

0 投票
6 回答
585 浏览

delphi - Is possible to include files (linking) based on a component property?

Delphi 2007/2009 odd question here:

It's possible, based on a component property defined in design-time, to include files in linking or leave them ?

Example: If I leave SomeProperty true, when compiling, the unit SomeUnit will be included into my project. Otherwise it will not be included.

My second approach to this problem is to deploy a second component, which when dropped in the form (or not) will include the unit in uses clause. But if it can be done with a property, that'll be better.

I want to avoid conditional compilation via IFDEF because that forces the component to be built every time the projects are built. Or not?

I am trying to achieve an easy way of including some units in project, and then those units will provide support for specific databases. Having these into an option, at the connection component, will be ideally easy: Check support and that's done. Uncheck, and get some less KBs in your compiled APP.

edit: I'll stay with the component way for instance. I knew the IFDEF method and things, but that forces the component to be built everytime the projects are built. Or not?

I was trying to achieve an easy way of including some units in project, and then that units will provide support for specific databases. Having these into an option, at the connection component, will be ideally easy: Check support and that's done. Uncheck, and get some less KBs in your compiled APP.

0 投票
11 回答
30703 浏览

c++ - 使用 #ifdefs 和 #define 可选择将函数调用转换为注释

有没有可能做这样的事情

这个想法是,如果 SOMETHING 被定义,那么对 foo(...) 的调用将成为注释(或不会被评估或编译的东西),否则它会成为对 MyFunction 的调用。

我见过 __noop 使用过,但我不相信我可以使用它。

编辑:

我不认为我可以在这里真正使用宏,因为 MyFunction 接受可变数量的参数。

另外,我想让它不评估参数!(因此,像注释掉 MyFunction 的主体之类的事情并不能真正给我我需要的东西,因为仍然会评估参数)

0 投票
6 回答
23591 浏览

python - Python中的条件编译

如何在 Python 中进行条件编译?

它使用 DEF 吗?

0 投票
1 回答
1310 浏览

mfc - 如何有条件地编译VC6资源

根据以环境变量的形式设置的编译开关(值为COMPILE_ACOMPILE_B),我想用不同的设置编译我的应用程序,例如应用程序名称和启动画面。

我做到了这一点:

  1. 在“项目/设置/C/C++/预处理器定义”中,我添加了$(COMPILESWITCH)(命令行选项中的结果/D "$(COMPILESWITCH)")。

  2. 在 stdafx.h 我可以使用以下代码,这意味着我通过命令行参数正确定义了预处理器定义:

但我注意到“ResourceView / [右键单击] / Properties”下的“Condition”属性......帮助文本说:

健康)状况

确定资源的包含。例如,如果条件是 _DEBUG,则此资源将仅包含在调试版本中。

这看起来很优雅,对吧?

指定_DEBUG为条件有效。因此,_DEBUG通过/D _DEBUG我的指定$(COMPILESWITCH)也应该工作,对吧?
出于某种原因,它没有;为什么?

或者还有另一种更好的方法来实现我想要的吗?