• C语言中的宏


    1.不带参数的宏定义:
    宏定义又称为宏代换、宏替换,简称“宏”。
    格式:
    #define 标识符 字符串
    其中的标识符就是所谓的符号常量,也称为“宏名”。
    预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
    掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。
    即在对相关命令或语句的含义和功能作具体分析之前就要换:
    例:
    #define PI 3.1415926
    把程序中出现的PI全部换成3.1415926
    说明:
    (1)宏名一般用大写
    (2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义
    (3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
    (4)宏定义末尾不加分号;
    (5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
    (6)可以用#undef命令终止宏定义的作用域
    (7)宏定义可以嵌套
    (8)字符串" "中永远不包含宏
    (9)宏定义不分配内存,变量定义分配内存。
    2.带参数的宏:
    除了一般的字符串替换,还要做参数代换
    格式:
    #define 宏名(参数表) 字符串
    例如:#define S(a,b) a*b
    area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2;
    类似于函数调用,有一个哑实结合的过程:
    (1)实参如果是表达式容易出问题
    #define S(r) r*r
    area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b;
    正确的宏定义是#define S(r) (r)*(r)
    (2)宏名和参数的括号间不能有空格
    (3)宏替换只作替换,不做计算,不做表达式求解
    (4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
    (5)宏的哑实结合不存在类型,也没有类型转换。
    (6)函数只有一个返回值,利用宏则可以设法得到多个值
    (7)宏展开使源程序变长,函数调用不会
    (8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
  • 相关阅读:
    每日vim插件--vim中的文本对象及相关插件
    《android传感器高级编程》译者序
    我在用的mac软件(3)-效率篇
    终端环境之tmux
    我在用的mac软件(2)-终端环境之zsh和z(*nix都适用)
    我在用的mac软件(1)--终端环境之iTerm2
    转:微服务架构的理论基础
    怎么使用阿里云直播服务应用到现在主流直播平台中
    WindowsServer2012显示计算机的方法
    在Windows Server 2012启用或关闭Internet Explorer增强的安全配置
  • 原文地址:https://www.cnblogs.com/ShindouHikaru/p/4202347.html
Copyright © 2020-2023  润新知