- 12.3.2 #if和#elif预处理程序语句
- if预处理程序语句提供控制条件编译的更通用方法。if语句可以用来检测常量表达式是不是非零。如果表达式的结果非零,就会处理到#else、#elif或#endif为止的所有后续行;否则将跳过它们。
- if MAC_OS_X_VERSION_MIN_REQUIRED<MAC_OS_X_VERSION_10_5
- define NSMaximumStringLength(INT_MAX-1)
- endif
- if defined(DEBUG)
- endif
- ifdef DEBUG
- endif
- if!defined(NS_INLINE)
- if defined(GNUC)
- define NSINLINE static__inline_attribute((always_inline))
- elif defined(MWERKS)||defined(__cplusplus)
- define NS_INLINE static inline
- elif defined(_MSC_VER)
- define NS_INLINE static__inline
- elif defined(WIN32)
- define NSINLINE static_inline
- endif
- endif
- if另一种常见用法是在如下代码序列中:
- if defined(DEBUG)&&DEBUG
- endif
12.3.2 #if和#elif预处理程序语句
if预处理程序语句提供控制条件编译的更通用方法。if语句可以用来检测常量表达式是不是非零。如果表达式的结果非零,就会处理到#else、#elif或#endif为止的所有后续行;否则将跳过它们。
举一个如何使用它的例子,Foundation头文件NSString.h中有以下行:
if MAC_OS_X_VERSION_MIN_REQUIRED<MAC_OS_X_VERSION_10_5
define NSMaximumStringLength(INT_MAX-1)
endif
这将预定义变量MAC_OS_X_VERSION_MIN_REQUIRED的值与预定义变量MAC_OS_X_VERSION_10_5的值进行比较。如果前者小于后者,就处理随后的#define,否则就跳过它。如果程序在MAC OS X 10.5或更高版本上编译,这大概将一个字符串的最大长度设置为整型的最大大小减1。
特殊运算符
defined(name)
也能够用在#if语句中。预处理程序语句集
if defined(DEBUG)
……
endif
和
ifdef DEBUG
……
endif
的作用相同。
以下语句出现在NSObjcRuntime.h头文件中,用于根据使用的特定编译器定义NS_INLINE(如果之前未定义):
if!defined(NS_INLINE)
if defined(GNUC)
define NSINLINE static__inline_attribute((always_inline))
elif defined(MWERKS)||defined(__cplusplus)
define NS_INLINE static inline
elif defined(_MSC_VER)
define NS_INLINE static__inline
elif defined(WIN32)
define NSINLINE static_inline
endif
endif
if另一种常见用法是在如下代码序列中:
if defined(DEBUG)&&DEBUG
……
endif
这使得#if到#endif之间的语句只有在定义了DEBUG而且具有非零值时才被处理。