是否可以在一个{$ IFDEF}指令中定义多个条件?
我想有这样的语法:
{$IFDEF Condition1 OR Condition2} DoSomething; {$ENDIF}
{$IFDEF Condition1 AND Condition2} DoSomethingElse; {$ENDIF}
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在开发一个包含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,它仍然会使用新的常量,这似乎是不正确的.
在此先感谢您的帮助!
如何在构建设置中定义预处理器宏,如IPAD_BUILD和IPHONE_BUILD(以及如何在我的工厂方法中使用它们)?
我现在正在用这些,想知道背后会发生什么事情会很酷.
macros objective-c conditional-compilation ios c-preprocessor
我是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代码,#if并且#ifdef应当不惜一切代价避免,除了可能在头文件.为什么#ifdef在.c文件中使用会被视为糟糕的编程习惯?
考虑以下类,将内部结构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) 是否有任何预处理器符号允许类似的东西
#if CLR_AT_LEAST_3.5
// use ReaderWriterLockSlim
#else
// use ReaderWriterLock
#endif
Run Code Online (Sandbox Code Playgroud)
或其他一些方法来做到这一点?
我应该为OS X特定代码使用什么C预处理器条件?如果我正在编译OS X,我需要包含一个特定的库,如果我正在编译Linux,我需要包含一个不同的头.
我知道有,__APPLE__但我不知道这是否是OS X 10.x的当前条件.
如何在VB 6中执行类似于以下C代码的操作?
#ifdef _DEBUG_
// do things
#else
// do other things
#end if
Run Code Online (Sandbox Code Playgroud) 任何人都可以帮我解释一下/为什么/ clr与/ mtd不兼容?有什么替代方案?如果我使用/ md或/ mdd,内部会发生什么?
据我所知,我们没有合并使用/ clr和/ mtd.有人可以解释是否有办法做到这一点?请解释我如何以及为什么/ clr与Visual Studio中的/ mt和/ mtd不兼容?
visual-studio-2005 c++-cli conditional-compilation visual-studio visual-c++
macos ×3
c ×2
c++ ×2
c# ×1
c++-cli ×1
compile-time ×1
delphi ×1
ios ×1
iphone ×1
macros ×1
objective-c ×1
templates ×1
vb6 ×1
visual-c++ ×1
xcode ×1