zoukankan      html  css  js  c++  java
  • C- 宏

    概念

    #开头的是编译预处理指令

    用#define来定义一个宏

    格式:#define <name> <value>

    注意:

    结尾没有分号,因为不是c语句;

    名字必须是一个单词,值可以是多种东西

    在C语言的编译器开始编译之前,编译预处理程序(cpp)会把程序中到名字换成值

    完全的文本替换

    可以用gcc —save-temps打印出宏替换后的文件

    如果一个宏的值中有其他宏的名字,也会被替换

    如果一个宏的值超过一行,最后一行之前的行末需要加

    宏的值后面出现的注释不会被当作宏的值的一部分

    没有值的宏

    #define _DEBUG

    这类宏用于条件编译,后面其他的编译预处理指令来检查这个宏是否已经被定义过了

    预定义的宏

    __LINE__

    __FILE__

    __DATE__

    __TIME__

    __STDC__

    像函数的宏

    #define cube(x)((x)*(x))

    宏可以带参数

    错误定义的宏

    #define RADTODEG(x)(x*52.333)

    #define RADTODEG(x)(x*23.888)

    带参数宏的原则

    ⼀切都要括号

    整个值要括号

    参数出现的每个地⽅都要括号

    #defifine RADTODEG(x) ((x) * 57.29578)

     
     

    带参数的宏

    可以带多个参数

    #defifine MIN(a,b) ((a)>(b)?(b):(a))

    也可以组合(嵌套)使⽤其他宏

     

    #defifine PRETTY_PRINT(msg) printf(msg);

    if (n < 10)

    PRETTY_PRINT("n is less than 10");

    else

    PRETTY_PRINT("n is at least 10");

     
     

    带参数的宏

    在⼤型程序的代码中使⽤⾮常普遍

    可以⾮常复杂,如“产⽣”函数

    在#和##这两个运算符的帮助下

    宏的缺点:不会做参数检查, 部分宏会被inline函数替代

    其他编译预处理指令

    1)条件编译

    2)error

    参考资料:《翁恺C语言编程》

  • 相关阅读:
    git撤销操作总结
    pull request的一些思考
    设计模式之门面模式
    设计模式之策略模式
    java中的堆栈
    git冲突的处理
    Eclipse 未正常退出,导致进不去的问题
    think in java读后总结---Map集合的几种遍历方式
    maven打包后项目名称不对
    python之正则表达式
  • 原文地址:https://www.cnblogs.com/marton/p/13125311.html
Copyright © 2011-2022 走看看