• 十四、程序结构(2)——宏


    编译预处理指令

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

    (2)它们不是C语言的成分,但是C语言程序离不开它们

    (3)#define用来定义一个宏

    #define
    #define <名字>  <值>

    (1)注意没有结尾的分号,因为不是C的语句

    (2)名字必须是一个单词,值可以是各种的东西

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

    ——完全的文本替换

    (4)gcc-save-temps

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

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

    (3)宏的值后面出现的注释不会被当做宏的值的一部分

    没有值的宏
    #define _DEBUG

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

    预定义的宏
    _LINE_
    _FILE_
    _DATE_
    _TIME_
    _STDC_

    带参数的宏

    像函数的宏
    #define cube(x) ((x)*(x)*(x))

    宏可以带参数

    错误定义的宏
    #define  RADTODEG(x)(x*57.29578)
    #define  RADTODEG(x)(x)*57.29578
    带参数的宏的原则

    一切都要括号

    ——整个值要括号

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

    #define  RADTODEG(x) ((x)*57.29578)
    带参数的宏

    (1)可以带多个参数

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

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

    分号?

    #define  PRETTY_PRINT(msg) printf(msg);
    
    if(n<10)
         PRETTY_PRINT("n is less than 10");
    else
          PRETTY_PRINT("n is at less  10");
    带参数的宏

    (1)在大型程序的代码中使用非常普遍

    (2)可以非常复杂,如“产生”函数的帮助下

    ——在#和##这两个运算符

    (3)存在中西方文化差异

    (4)部分宏会被inline函数替代

    其他编译预处理指令

    (1)条件编译

    (2)error

    ...

  • 相关阅读:
    Chrome使用video无法正常播放MP4视频的解决方案
    ArcGIS 按掩膜裁剪地形
    bilibili 分P视频 需下载哔哩哔哩投稿工具
    U盘/硬盘数据恢复
    visio 2010、2013、2016、2019安装包
    经纬度WGS84地理坐标系转换成CGCS2000坐标系步骤,必备!
    Git 配置多个用户邮箱以及在 Sourcetree 中使用
    Chrome 插件 一键保存当前打开的所有标签页
    Cesium粒子系统学习
    破解ArcGIS坐标系之惑: 从基本概念到常用操作
  • 原文地址:https://www.cnblogs.com/Strugglinggirl/p/9080408.html
Copyright © 2020-2023  润新知