**宏 **本质上是形参的替换
**无参宏 **: 也叫宏常量,还叫宏指令

//不会占存储空间,是最传统的方法,如果定义全局变量会多占用4个字节的存储空间
也可以增加可读性
#define SIZE 10 (后面没有;)  

带参宏 :宏函数和函数的区别

1、运行时间不同(宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已)
2、不需要考虑类型(宏进行定义时不会考虑参数的类型)
3、参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作

可以用变量赋值
带参宏的使用注意事项
1、宏函数中的参数一定要用括号括起来,以防止替换后的优先级问题
#define MIN1(x,y) ((x)<(y)?(x):(y))

2、宏函数中的整个表达式也需要用括号括起来,以防止替换后的优先级问题
#define LOWER(ch) ((ch>='A'&&ch<='Z')?(ch+32):ch)

3、同函数中有多条语句时,应写成复合语句(加上{},让变量变成局部变量),以防止变量的重定义问题

#define ASD(data , size)  {for (int i = 0; i<size; i++) { 
   printf("%d ",data[i]);}printf("
");
}

4、调用宏函数时,不要使用++,--作为实参;++运算时,宏只进行替换不进行运算,避免重复计算++或—-

 a = 3;
 b = 4;
 int result = MAX1(++a, ++b);
NSLog(@"a = %d b = %d result = %d",a,b,result);
**特殊:**
#define PRINT(x,y) printf(#x" = %d,"#y"= %d
",x,y);
  //#把a放到""内,然后删除自己
原文地址:https://www.cnblogs.com/xulinmei/p/7444063.html