标签: conditional-compilation

是否可以一次为多个指令定义{$ IFDEF}?

是否可以在一个{$ IFDEF}指令中定义多个条件?
我想有这样的语法:

{$IFDEF Condition1 OR Condition2} DoSomething; {$ENDIF}
{$IFDEF Condition1 AND Condition2} DoSomethingElse; {$ENDIF}
Run Code Online (Sandbox Code Playgroud)

谢谢

delphi conditional-compilation logical-operators

42
推荐指数
3
解决办法
2万
查看次数

哪个条件编译用于在Mac和iPhone之间切换特定代码?

我正在开发一个包含Mac应用程序和共享代码的iPad应用程序的项目.如何使用条件编译开关从iPhone项目中排除特定于Mac的代码,反之亦然?我注意到,TARGET_OS_IPHONETARGET_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,它仍然会使用新的常量,这似乎是不正确的.

在此先感谢您的帮助!

iphone macos xcode conditional-compilation

39
推荐指数
3
解决办法
2万
查看次数

#if和#ifdef Objective-C预处理器宏有什么区别?

如何在构建设置中定义预处理器宏,如IPAD_BUILD和IPHONE_BUILD(以及如何在我的工厂方法中使用它们)?

我现在正在用这些,想知道背后会发生什么事情会很酷.

macros objective-c conditional-compilation ios c-preprocessor

38
推荐指数
2
解决办法
5万
查看次数

c ++ #ifdef Mac OS X问题

我是C++的新手.我目前正在开展一个小组项目,我们希望我们的课程兼容实验室计算机(Windows)和我的计算机(Mac OS X).

以下是我们在文件顶部放置的内容:

#ifdef TARGET_OS_X
#    include <GLUT/glut.h>
#    include <OpenGL/OpenGL.h>
#elif defined _WIN32 || defined _WIN64
#    include <GL\glut.h>
#endif
Run Code Online (Sandbox Code Playgroud)

我意识到之前已经问过这个问题,但是我的搜索给了我相互矛盾的答案,例如"_MAC","TARGET_MAC_OS","MACINTOSH"等.在#ifdef语句中输入的当前和正确的声明是什么兼容Mac?现在它不起作用.

谢谢!

c++ macos compatibility conditional-compilation

34
推荐指数
4
解决办法
4万
查看次数

为什么要在.c文件中避免使用#ifdef?

我尊重程序员表示,在C代码,#if并且#ifdef应当不惜一切代价避免,除了可能在头文件.为什么#ifdef在.c文件中使用会被视为糟糕的编程习惯?

c conditional-compilation

31
推荐指数
2
解决办法
1万
查看次数

基于模板参数的条件编译时包含/排除代码?

考虑以下类,将内部结构Y用作类型,例如.在模板中,稍后:

template<int I>
class X{
  template<class T1>
  struct Y{};

  template<class T1, class T2>
  struct Y{};
};
Run Code Online (Sandbox Code Playgroud)

现在,这个示例显然不会编译,错误是第二个X<I>::Y已经定义或者模板参数太多.
我想在没有(额外)部分特化的情况下解决这个问题,因为int I参数不是唯一的,并且它的位置可以在不同的部分特化中有所不同(我的实际结构看起来更像这样,上面只是为了简化问题),所以我想one class fits every I解决.


我的第一个想法显然是enable_if,但这似乎在我身上失败,例如.我仍然得到同样的错误:

// assuming C++11 support, else use boost
#include <type_traits>

template<int I>
class X{
  template<class T1, class = std::enable_if<I==1>::type>
  struct Y{};

  template<class T1, class T2, class = std::enable_if<I==2>::type>
  struct Y{};
};
Run Code Online (Sandbox Code Playgroud)

所以,既然enable_if失败了,我希望还有另一种方法来实现以下编译时检查:

template<int I>
class X{
  __include_if(I == 1){
    template<class T1>
    struct Y{}; …
Run Code Online (Sandbox Code Playgroud)

c++ templates conditional-compilation compile-time

25
推荐指数
1
解决办法
2万
查看次数

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

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

#if CLR_AT_LEAST_3.5
// use ReaderWriterLockSlim
#else
// use ReaderWriterLock
#endif
Run Code Online (Sandbox Code Playgroud)

或其他一些方法来做到这一点?

c# conditional-compilation c-preprocessor

24
推荐指数
2
解决办法
8977
查看次数

我应该为OS X特定代码使用什么C预处理器条件?

我应该为OS X特定代码使用什么C预处理器条件?如果我正在编译OS X,我需要包含一个特定的库,如果我正在编译Linux,我需要包含一个不同的头.

我知道有,__APPLE__但我不知道这是否是OS X 10.x的当前条件.

c macos conditional-compilation c-preprocessor

23
推荐指数
2
解决办法
1万
查看次数

调试模式在VB 6中?

如何在VB 6中执行类似于以下C代码的操作?

#ifdef _DEBUG_
    // do things
#else
    // do other things
#end if
Run Code Online (Sandbox Code Playgroud)

vb6 conditional-compilation

23
推荐指数
4
解决办法
1万
查看次数

为什么/ clr与Visual Studio中的/ mt和/ mtd不兼容?

任何人都可以帮我解释一下/为什么/ clr与/ mtd不兼容?有什么替代方案?如果我使用/ md或/ mdd,内部会发生什么?

据我所知,我们没有合并使用/ clr和/ mtd.有人可以解释是否有办法做到这一点?请解释我如何以及为什么/ clr与Visual Studio中的/ mt和/ mtd不兼容?

visual-studio-2005 c++-cli conditional-compilation visual-studio visual-c++

21
推荐指数
1
解决办法
2万
查看次数