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

    //不会占存储空间,是最传统的方法,如果定义全局变量会多占用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放到""内,然后删除自己
    
  • 相关阅读:
    RHCE考试(Linux7)
    RHCSA考试(Linux7)
    调整Linux最大文件打开数
    记一次渗透测试面试题
    反序列化漏洞
    cisp-pte靶场通关思路分享----xss篇
    cisp-pte靶场通关思路分享----远程文件包含篇
    利用python轻松搭建http服务器
    cisp-pte靶场通关思路分享----综合题篇
    cisp-pte靶场通关思路分享----日志分析篇
  • 原文地址:https://www.cnblogs.com/xulinmei/p/7444063.html
Copyright © 2020-2023  润新知