zoukankan      html  css  js  c++  java
  • 宏定义和const变量/普通函数的区别

    宏定义常量和const变量比较:

    1. 宏定义常量在预处理阶段进行替换,不进行类型检查;

     const变量在编译阶段进行类型检查;

    2. 宏定义常量不存在于常量表中,系统不为其分配内存;

     const变量存在于常量表中,系统为其分配内存;

    3. 大量使用宏,每次预编译都需进行替换,易导致编译时间过长;

     const变量不存在上述问题;

    4. 宏定义表达式直接进行字符串替换,存在边缘效应;

     const变量不存在上述问题;

    // 预想的N值是5
    #define N 2+4
    // 预想的a的值是3,可实际上a的值是4
    int a = N/2; 

    宏定义函数和普通函数比较:

    简短并且被频繁调用的函数经常用函数式宏定义来代替实现

    // 函数式宏定
    #define MAX(a,b) ((a)>(b)?(a):(b))
    // 普通函数 
    MAX(int a,int b) { return a>b?a:b;}

    1. 宏定义函数的参数没有类型,预处理器只做形式上的替换,传参时不做参数类型检查;

     普通函数的参数有实际类型,传参时做参数类型检查;

    2. 宏定义函数本身不进行编译生成指令,但是在代码中每次出现的位置都要编译生成指令,其编译生成的目标文件较大;

     普通函数本身要编译生成指令,在代码中每次出现的位置编译生成传参指令和调用指令,其编译生成的目标文件较小;

    3. 宏定义函数存在边缘效应,内层括号和外层括号不可以省略;

     普通函数不存在上述情况;

    参考链接:https://www.cnblogs.com/dong008259/archive/2011/12/27/2302625.html

  • 相关阅读:
    多线程
    关于并发和并行
    文件系统
    java.util.Arrays类
    程序管理与SElinux
    用户和用户组管理总结
    useradd和adduser
    打印可见字符
    cmd中控制某个命令执行多少次
    keras模块之-优化器(optimizers)--笔记
  • 原文地址:https://www.cnblogs.com/yongjin-hou/p/15208051.html
Copyright © 2011-2022 走看看