当我查看一些类时,我对"pound if"或者说#if
语法有些困惑。
例如:
#if someConstant == someNumber
do something
#elif
etc
对比:
if (someConstant == someNumber)
do something
else if {
do more stuff
}
有什么区别,为什么要使用 #if
?
当我查看一些类时,我对"pound if"或者说#if
语法有些困惑。
例如:
#if someConstant == someNumber
do something
#elif
etc
对比:
if (someConstant == someNumber)
do something
else if {
do more stuff
}
有什么区别,为什么要使用 #if
?
#if
等是预处理器指令。这意味着它们在编译之前就被处理,而不是在运行时处理。例如,当你为debug
构建时定义调试行为,只有在编译时才会编译,而不是在release
构建时编译,这是很有用的:
#if DEBUG
#define ISRelease(x) [x release]
#else
#define ISRelease(x) [x release], x = nil
#endif
(代码来自Jeff LaMarche的博客。)
这样,您就不需要在提交应用程序之前再次查看整个应用程序的代码并删除大量调试代码。这只是这些指令用法的一个小例子。
#if
是一种预处理器指令。
if
是一种语言结构。
它们之间的区别在于最终程序编译成的方式。当您使用#if
时,该指令的结果是最终程序将包含这些行。而当您使用语言结构时,传递给结构的表达式将在运行时而不是在编译时进行评估。
之前的回答涵盖了从调试到术语学的#if
用法,但忽略了另一种常见用法:#if
用于注释大块代码。当程序员需要摆脱已经包含注释的内容时,这非常有用。
#if 0
a lof of C code with /* style */ comments included
#endif
我经常使用这个。相较于任何其他的#if
和注释风格——它真的不关心其中大部分破损的语法。
#if
替换为#ifdef
(“如果已定义”),则条件仅在已定义DEBUG
的情况下成功。还有一个#ifndef
预处理器指令,它返回相反的结果(“如果未定义”)。 - Stuart