标签:
--------预处理程序--------
#define Constant 1
//预处理程序语句后面不要加分号(;) ,因为预定义名称一出现,预处理程序就会将右边的所有字符替换到程序中去。所以在预处理程序语句的后面不需要加 分号(;) ,不然也会一并替换到程序中
在定义带有参数的名称时,预定义名称的参数列表的左括号之间不允许空格。带参数的宏定义的一般形式如下:#define <宏名>(<参数表>) <宏体>
其中, <宏名>是一个标识符,<参数表>中的参数可以是一个,也可以是多个,视具体情况而定,当有多个参数的时候,每个参数之间用逗号分隔。<宏体>是被替换用的字符串,宏体中的字符串是由参数表中的各个参数组成的表达式。例如:
#define SUB(a,b) a-b
如果在程序中出现如下语句:
result=SUB(2, 3);
则被替换为:
result=2-3;
如果程序中出现如下语句:
result= SUB(x+1, y+2);
则被替换为:
result=x+1-y+2;
在这样的宏替换过程中,其实只是将参数表中的参数代入到宏体的表达式中去,上述例子中,即是将表达式中的a和b分别用2和3代入。
我们可以发现:带参的宏定义与函数类似。如果我们把宏定义时出现的参数视为形参,而在程序中引用宏定义时出现的参数视为实参。那么上例中的a和b就是形参,而2和3以及x+1和y+2都为实参。在宏替换时,就是用实参来替换<宏体>中的形参。
//例句: #import "file.h"
在 Objective-C中,#import 被当成 #include 指令的改良版本来使用。除此之外,#import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题
@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import
@class就是告诉编译器有这么一个类,至于类的定义是啥不知道
@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import
#import<> 跟 #import""又什么区别?
“”的意思是自己创建的文件,用这个首先会在当前的目录中寻找,如果找不到就到其他的位置寻找,“”和<>是相对的一个是自己创建的文件一个是系统的文件
//例:如果前面已经定义了一个符号(IPAD),下面的语句就把 kImageFiel 定义为 @"barnHD.png" ,否则就定义为 @"barn.png" #ifdef IPAD #define kImageFile @"barnHD.png" #else #define kImageFile @"barn.png" #endif
//如果程序编译时,#ifdef 行中所指定的符号已经通过 #define 语句或命令行定义了,那么编译器将处理从此处开始到 #else 、#elif 或 #endif 的程序段,否则将忽略这个程序段。
//例:这里讲预定义变量 MAC_OS_X_VERSION_MIN_REQUIRED 的值与预定义变量 MAC_OS_X_VERSION_10_5 的值进行比较。如果前者小于后者,就处理随后的 #define
#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
#define NSMaximumStringLength (INT_MAX-1)
#endif
//特殊运算符 define(name) 也可以用在#if语句中
#if defined(DEBUG)
……
#endif
和
#if DEBUG
……
#endif
的作用相同
#undef name
标签:
原文地址:http://www.cnblogs.com/fangjingjing/p/5879634.html