Vol*_*da2 1 iphone conditional-compilation
#ifdef doesn't work. But why?
CGFloat maxScale;
if ( [[UIScreen mainScreen] respondsToSelector: @selector (scale)] == YES )
{
NSLog (@"case1");
#define GLOBAL1
}
else
{
NSLog (@"case2");
#undef GLOBAL1
}
#ifdef GLOBAL1
NSLog (@"first");
maxScale = 1.0 / [[UIScreen mainScreen] scale];
#else
NSLog (@"second");
maxScale = 1.0;
#endif
#undef GLOBAL1
Run Code Online (Sandbox Code Playgroud)
我的日志:案例1,第二个。但首先必须是case1。
#define,#ifdef是预处理器宏/条件。这意味着它们中包含的逻辑是在编译代码之前编译的。它实际上不是您代码的一部分。
[编辑]
这就是预处理器在读取代码时看到的内容。
#define GLOBAL1
#undef GLOBAL1
#ifdef GLOBAL1
//...
#else
//...
#endif
#undef GLOBAL1
Run Code Online (Sandbox Code Playgroud)
它忽略所有其他代码和逻辑。
这是编译器生成的实际代码输出:
if ( [[UIScreen mainScreen] respondsToSelector: @selector (scale)] == YES )
{
NSLog (@"case1");
}
else
{
NSLog (@"case2");
}
// because the pre-processor #undef GLOBAL1
NSLog (@"second");
maxScale = 1.0;
Run Code Online (Sandbox Code Playgroud)
预处理器代码被“执行”,告诉编译器如何编译,并且在运行时不会被使用或运行。
希望有帮助!