zoukankan      html  css  js  c++  java
  • define

    两种格式:

    1.简单的宏定义:#define <宏名>  <字符串>

    2.带参数的宏定义:#define A(x)  x

    运行时机

    C/C++的运行阶段:

     

    预处理主要进行的步骤:

    把源程序中的#include扩展为文件正文,即把包含.h文件找到并展开到#include所在处。

    预处理器根据#if和#ifdef等编译命令及其后的条件,将源程序中的某部分包含进来或者排除在外,通常把排除在外的语句转换成空行。

    预处理器将源程序文件中出现的对宏的引用展开成相应的宏定义。

    注:

    在编程使用宏替换时,当字符串中不只一个符号时,加上括号表现出优先级。如果是带参数的宏定义,则要给宏体中的每个参数加上括号,并在整个宏体上再加一个括号。例如:

    #define MIN(x,y) ((x)>(y)?(x):(y))

    使用宏的优点:

    方便程序的修改    提高效率

    使用带参数的宏定义可完成函数调用的功能,又能减少系统开销,提高运行效率。正如C语言中所讲,函数的使用可以使程序更加模块化,便于组织,而且可重复利 用,但在发生函数调用时,需要保留调用函数的现场,以便子函数执行结束后能返回继续执行,同样在子函数执行完后要恢复调用函数的现场,这都需要一定的时 间,如果子函数执行的操作比较多,这种转换时间开销可以忽略,但如果子函数完成的功能比较少,甚至于只完成一点操作,如一个乘法语句的操作,则这部分转换 开销就相对较大了,但使用带参数的宏定义就不会出现这个问题,因为它是在预处理阶段即进行了宏展开,在执行时不需要转换,即在当地执行。宏定义可完成简单 的操作,但复杂的操作还是要由函数调用来完成,而且宏定义所占用的目标代码空间相对较大。所以在使用时要依据具体情况来决定是否使用宏定义。

  • 相关阅读:
    UVa10917
    T^T online judge 2952
    AcWing 105.七夕祭
    AcWing 99.激光炸弹(二维前缀和)
    AcWing 97.约数之和
    AcWing 95. 费解的开关
    ccf/csp 2018 12 小明放学
    BNUOJ 33535 Final Exam Arrangement
    分块
    sublime安装配置
  • 原文地址:https://www.cnblogs.com/healthylife/p/5869698.html
Copyright © 2011-2022 走看看