Tag: 条件编译

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

我的项目需要Java 1.6进行编译和运行。 现在我有一个要求,使其与Java 1.5(从市场方面)的工作。 我想要replace方法体(返回types和参数保持不变),使其与Java 1.5编译没有错误。 详细信息:我有一个实用工具类称为OS封装所有操作系统特定的东西。 它有一个方法 public static void openFile(java.io.File file) throws java.io.IOException { // open the file using java.awt.Desktop … } 双击打开文件( start Windows命令或open Mac OS X命令等效项)。 由于无法使用Java 1.5进行编译,因此我希望在编译过程run32dll其排除,并用另一种方法replace为Windows调用run32dll或使用Runtime.exec open Mac OS X。 问:我该怎么做? 注释可以帮助吗? 注意:我使用ant,并且可以创build两个java文件OS4J5.java和OS4J6.java ,它们将包含OS类与Java 1.5和1.6所需的代码,并将其中一个复制到OS.java编译之前(或丑陋方式 – 取决于java版本有条件地取代OS.java的内容),但我不想这样做,如果有另一种方式。 详细阐述:在CI中可以使用ifdef, ifndef ,在Python中没有编译,我可以使用hasattr或其他东西来检查一个特性,在Common Lisp中我可以使用#+feature 。 有什么类似的Java? 发现这篇文章,但它似乎没有帮助。 任何帮助是极大的赞赏。 KH。

哪些条件编译用来在Mac和iPhone之间切换特定的代码?

我正在开发一个包含Mac应用程序和共享代码的iPad应用程序的项目。 如何使用条件编译开关从iPhone项目中排除Mac特定的代码,反之亦然? 我注意到TARGET_OS_IPHONE和TARGET_OS_MAC都是1,所以它们都是真的。 是否有另一个我可以使用的开关只有在编译特定目标时才会返回true? 大多数情况下,我已经通过将#include <UIKit/UIKit.h>和#include <Cocoa/Cocoa.h>到两个项目的预编译头文件中来获得合作的文件。 我共享模型和一些实用程序代码,从RSS提要和Evernote获取数据。 尤其是, [NSData dataWithContentsOfURL:options:error:]函数对于选项参数iOS 3.2和更早的版本以及Mac OS 10.5和更早的版本,采用了不同于常规的iOS 4和Mac OS 10.6。 我正在使用的条件是: #if (TARGET_OS_IPHONE && (__IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_3_2)) || (TARGET_OS_MAC && (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5)) 这似乎工作,但我想确保这是防弹。 我的理解是,如果Mac版本设置为10.6,但iOS版本设置为3.2,即使它正在编译为iOS 3.2,它仍然会使用新的常量,这似乎是不正确的。 提前感谢任何帮助!

C#!有条件的属性?

C#有没有 Conditional ( !Conditional , NotConditional , Conditional(!) )属性? 我知道C#有一个Conditional属性 : [Conditional("ShowDebugString")] public static void ShowDebugString(string s) { … } 相当于1 : public static void ShowDebugString(string s) { #if ShowDebugString … #endif } 但在这种情况下,我想反向行为(你必须明确select ): public static void ShowDebugString(string s) { #if !RemoveSDS … #endif } 这导致我尝试: [!Conditional("RemoveSDS")] public static void ShowDebugString(string s) { … […]

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

我正在写一些半可移植的代码,并希望能够检测到我编译的iPhone。 所以我想要像#ifdef IPHONE_SDK… 大概Xcode定义了一些东西,但是在项目属性下我看不到任何东西,Google也没什么帮助。

ifdef中的布尔值是:“#ifdef A && B”与“#if defined(A)&& defined(B)”相同吗?

在C ++中,是这样的: #ifdef A && B 一样的: #if defined(A) && defined(B) ? 我想这不是,但我一直没能find与我的编译器(VS2005)的差异。

在C ++中确定32位和64位

我正在寻找一种方法来可靠地确定C ++代码是否正在编译32位和64位。 我们已经提出了我们认为使用macros的合理解决scheme,但是很想知道人们是否可以考虑可能会失败的案例,或者是否有更好的方法来做到这一点。 请注意,我们正在尝试在跨平台的多编译器环境中执行此操作。 #if ((ULONG_MAX) == (UINT_MAX)) # define IS32BIT #else # define IS64BIT #endif #ifdef IS64BIT DoMy64BitOperation() #else DoMy32BitOperation() #endif 谢谢。

在Windows和Linux上编译C ++:ifdef switch

我想在Linux和Windows上运行一些c ++代码。 有一些代码我只想包括一个操作系统,而不是其他的。 有没有一个标准的#ifdef曾经可以使用? 就像是: #ifdef LINUX_KEY_WORD … // linux code goes here. #elif WINDOWS_KEY_WORD … // windows code goes here. #else #error "OS not supported!" #endif 这个问题确实是重复的,但这里的答案要好得多,尤其是被接受的答案。

Visual Studio中的发布和debugging模式有什么区别?

可能重复: 在.NET中debugging与释放 debugging/发布差异 在构build项目时,Visual Studio中的发布和debugging模式有什么区别?

Java中的#ifdef #ifndef

我怀疑是否有办法在Java中编译时间条件,如#ifdef #ifndef在C ++中。 我的问题是,有一个用Java编写的algorithm,我有不同的运行时间提高到该algorithm。 所以我想测量一下每次使用什么样的改进措施后我能节约多less时间。 现在我有一组布尔variables,用于决定在运行时间哪些改进应该使用哪些不是。 但即使testing这些variables也会影响总运行时间。 所以我想在编译的时候想办法决定哪些部分应该被编译和使用。 有人知道用Java来做这件事的方法吗? 或者也许有人知道没有这样的方式(这也是有用的)。