问题标签 [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 投票
10 回答
36386 浏览

java - Java条件编译:如何防止代码块被编译?

我的项目需要 Java 1.6 来编译和运行。现在我需要让它与 Java 1.5 一起工作(从营销方面)。我想替换方法主体(返回类型和参数保持不变)以使其与 Java 1.5 一起编译而不会出错。

详细信息:我有一个名为的实用程序类OS,它封装了所有特定于操作系统的东西。它有一个方法

双击打开文件(startWindows 命令或openMac OS X 命令等效)。由于它不能用 Java 1.5 编译,我想在编译期间排除它,并用另一种调用run32dllWindows 或openMac OS X 的方法替换它,使用Runtime.exec.

问题:我该怎么做?注释可以在这里提供帮助吗?

注意:我使用 ant,我可以制作两个 java 文件OS4J5.javaOS4J6.java其中将包含OS具有 Java 1.5 和 1.6 所需代码的类,并在编译之前将其中一个复制到(或一种丑陋的方式 -根据 java 有条件OS.java地替换内容OS.java版本)但我不想这样做,如果有另一种方式。

详细说明:在 CI 中可以使用ifdef, ifndef,在 Python 中没有编译,我可以使用hasattr或其他东西检查功能,在 Common Lisp 中我可以使用#+feature. Java有类似的东西吗?

找到了这篇文章,但似乎没有帮助。

任何帮助是极大的赞赏。kh。

0 投票
3 回答
1302 浏览

c# - 如何在 .NET Framework 和 .NET Compact Framework 上编译库?

我正在开发一个可以在两种类型的框架(紧凑或非紧凑)上使用的技术库类。

开发此类库的最佳方法是什么?默认情况下使用 .NET 功能(对于 XP Embedded)并在使用 Windows CE(使用 CF.NET)时进行限制?

谢谢。

0 投票
2 回答
837 浏览

iphone - #ifdef 不起作用。但为什么?

我的日志:case1,第二个。但首先必须是case1。

0 投票
2 回答
10409 浏览

c# - .NET 4 的条件编译

可能重复:
条件编译和框架目标

我有一些适用于 .NET 4 的代码,但它不适用于 .NET 3.5。在 .NET 3.5 中,它需要使用对 Windows 的互操作调用。

我想在这两种情况下使用“ifdef”来使用不同的代码路径(最终我将弃用 .NET 3.5 代码)。

是否有预定义的指令值来识别代码何时使用 .NET 4 编译?

DEBUG是否与所有预定义指令( 、TRACE等)有良好的链接?下面的页面只给出了指令,而不是标准的预定义值:

C# 预处理器指令

0 投票
1 回答
224 浏览

cocoa - 在禁用 GC 的情况下编译时是否有条件语句来排除代码?

当 GC 设置为 required 时,我希望我的结构具有可可对象:

0 投票
1 回答
176 浏览

c++ - Is #endif GUARD_H good practice?

Consider this:

rather than:

Often I see at the #endif an 'identifier' commented out but without commenting it it still works.

Is everything after the #endif ingnored or...?

0 投票
2 回答
396 浏览

iphone - 在接口声明中进行条件编译时,接口生成器无法识别 IBOutlet

如果我在作为 xib 文件所有者的头文件中添加此条件编译标志,则 xib 文件无法读取 IBOutlet 并显示为丢失。并发出警告。

在运行时它工作正常。有没有人遇到过同样的问题?

0 投票
6 回答
3413 浏览

javascript - 如何使用 Google Closure Compiler 检测 JavaScript 中的 Internet Explorer?

我有一个处理鼠标按钮事件的 JavaScript 函数。它必须能够区分鼠标左键和右键。遗憾的是,Internet Explorer 对 event.button 使用的值与所有其他浏览器不同。我知道如何解释它们,但我需要知道该走哪条路。

我通过依赖条件编译的 JavaScript hack 做到了这一点。就像这样:

我认为这是一种相当安全的方法,因为它基于 JavaScript 解析器功能,无法伪造,也不太可能被其他浏览器模仿。

现在我正在使用 Google Closure Compiler 来打包我的 JavaScript 文件。我发现它也像任何其他注释一样删除了条件编译注释。所以我尝试了不同的技巧。其中之一是这样的:

不幸的是,闭包编译器非常聪明,发现条件永远不会为真并删除该代码。另外,我不喜欢它,因为微软最终可能会修复那个 \v 错误,然后检测失败。

我可以只阅读类似 navigator.appName 或它的名称之类的内容,但这太容易伪造了。如果有人修改了他们的浏览器标识,他们不太可能实现其他 event.button 行为......

闭包编译器允许保留某些注释。我试过这个:

虽然这会在压缩后产生所需的结果,但它不是源形式的功能性条件注释。但出于调试原因,我需要我的 JavaScript 文件在压缩和未压缩的情况下都可以工作。

我有没有希望在不手动修改压缩的 JS 文件的情况下让它工作?

作为参考,这是我原始形式的完整功能:

0 投票
3 回答
157 浏览

c - 在 ANSI-C 中支持多个代码库

我正在开发一个带有相关Ansi-C代码库的项目。(让我称之为“主要”代码库)。

我现在面临一个典型的问题(如下所述),我相信如果我手头有一种面向对象的语言,我将能够轻松解决这个问题。

问题是:我将不得不启动多个代码库;即我将不得不开始支持并行代码库(将来甚至可能更多)。所有新(即并行)代码库的初始代码库最初将与旧(即“主”)代码库相同。

当我们谈论'C'语言时,我一直在考虑将'#ifdef'语句添加到代码中,并在那些'ifdef'块中编写分支空间代码。

希望我把问题说清楚了(够了!),我想听听关于聪明模式的想法,这些模式可以帮助我在 Ansi C 中优雅地处理这个问题

干杯

0 投票
3 回答
1727 浏览

c# - 在设计器生成的代码中使用#if 指令和 Windows 窗体进行条件编译

背景

我有一个 C# Windows 窗体应用程序,它包含一个 Windows 服务和一个用于配置系统设置以及与该服务通信的接口。

期望的结果

我想构建两个版本的解决方案 - 一个包含所有 Windows 服务相关代码和表单元素的客户端版本和一个包含所有内容的服务器版本。

该表单包含一个选项卡式控件,其中一个选项卡包含用于使用套接字与 Windows 服务交互的元素。我真正想要实现的是,对于完整构建,包含服务相关元素的选项卡被编译,而对于条件构建,相同的选项卡被排除在外。

问题

在这个阶段,我围绕 Windows 服务相关代码使用了 #if 指令。例如:

在上面的示例中,“SERVERBUILD”对应于我可以通过配置管理器选择的构建配置(与标准的“发布”构建选项相反)。

我遇到的问题是我必须将这个#if 指令包装起来的一些代码位于标题为“ Windows 窗体设计器生成的代码”区域的 WinForm.Designer.cs 文件中。

似乎正在发生的事情是,当我对某些表单属性进行更改时,整个代码区域似乎被删除并重新生成,从而删除了我添加的#if 部分。

  • 我会以正确的方式解决这个问题吗?
  • 有没有办法避免丢失我在 WinForm.Designer.cs 代码中所做的更改的情况?

我真的很感谢任何有条件编译和这类东西经验的人的任何建议。