ios中的宏定义
宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。
参数编辑不带参数
宏定义又称为宏代换、宏替换,简称“宏”。
格式:
即在对相关命令或语句的含义和功能作具体分析之前就要换:
例:
把程序中出现的Pi全部换成
3.1415926
说明:
(1)宏名一般用大写
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
(4)宏定义末尾不加分号;
(7)宏定义允许嵌套
(8)字符串( " " )中永远不包含宏
带参数
除了一般的字符串替换,还要做参数代换
格式:
#define
宏名(参数表) 字符串
area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2;
#define
S(r) r*r
area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b;
2冷门重点编辑
#define
用法
1、 用无参宏定义一个简单的
常量
#define
LEN 12
这个是最常见的用法,但也会出错。
比如下面几个知识点你会吗?可以看下:
程序中有"NAME"则,它会不会被替换呢?
这个可以吗?
程序中有上面的宏定义,并且,程序里有句:
NAMELIST这样,会不会被替换成"zhangyuncong"LIST
四个题答案都是十分明确的。
第一个,""内的东西不会被宏替换。这一点应该大家都知道。
第二个,宏定义前面的那个必须是合法的
用户标识符
第三个,宏定义也不是说后面东西随便写,不能把字符串的两个""拆开。
(1) 不替换程序中字符串里的东西。
(2) 第一位置只能是合法的标识符(可以是关键字)
(3) 第二位置如果有字符串,必须把""配对。
(4) 只替换与第一位置完全相同的
标识符
2、 带参宏一般用法
则遇到MAX(1+2,value)则会把它替换成:
((1+2)>(value)?(1+2):(value))
注意事项和无参宏差不多。
但还是应注意
#define
FUN(a) "a"
那么,你会问了,我要是想让这里输入FUN(345)它就替换成"345"该怎么实现呢?
请看下面关于#的用法
3、 有参宏定义中#的用法
#define
STR(str) #str
#用于把宏定义中的参数两端加上字符串的""
4、 有参宏定义中##的用法
#define
WIDE(str) L##str
比如:WIDE("abc")就会被替换成L"abc"
那么FUN(id ma,in)会被替换成void main()
5、 多行宏定义:
#define
doit(m,n) for(int i=0;i<(n);++i)\
{\
m+=i;\
}
static标记的变量会存储到全局变量区,生命周期和程序相同。而宏定义所定义的生命周期与所在的载体的生命周期有关.
static只在声明的类中可见。
在声明的类中结束后,再次使用还是之前的值。
static只在声明的类中可见。
在声明的类中结束后,再次使用还是之前的值。