1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #if __has_feature(assume_nonnull) _Pragma("clang assume_nonnull begin") #endif __BEGIN_DECLS __END_DECLS #if __has_feature(assume_nonnull) _Pragma("clang assume_nonnull end") #endif
#define PI 3.1415926
#define ADD(a, b) (a + b)
#undef PI
#define SINGLE_IMPLEMENTATION(className) static className *instance_; \ \ + (instancetype)share##className \ { \ if (!instance_) { \ \ instance_ = [[self alloc] init]; \ } \ \ return instance_; \ }
#include #import #if 编译预处理中的条件命令, 相当于C语法中的if语句 #ifdef 判断某个宏是否被定义, 若已定义, 执行随后的语句 #ifndef 与#ifdef相反, 判断某个宏是否未被定义 #elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足, 则执行#elif之后的语句, 相当于C语法中的else-if #else 与#if, #ifdef, #ifndef对应, 若这些条件不满足, 则执行#else之后的语句, 相当于C语法中的else #endif #if, #ifdef, #ifndef这些条件命令的结束标志. #if 与 #ifdef 的区别:#if是判断后面的条件语句是否成立,#ifdef是判断某个宏是否被定义过。要区分开!
|