科创园

科创园地,分享技术知识,为科技助力发展,贡献一己之力。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

宏与函数,常量的比较关系

Posted on 2011-11-14 21:34  科创园  阅读(695)  评论(0编辑  收藏  举报

宏与函数的区别:
(1)内存堆栈:调用函数时  地址放入堆栈,函数执行完后将调用函数的地址从堆栈返回给程序;而宏展开是使用取代标识直接将宏名取代
(2)时间效应:调用函数需要现场保护 和恢复现场,需要较多时间,但不会使目标程序变长;宏展开在编译时运行,不占用运行时间,但会使目标程序变长
(3)参数传递:调用有参函数时,先将实参的值复制一份,然后将复制的值传给形参;展开有参宏直接将实参置换形参
(4)参数类型:有参函数形参必须指定类型;而有参宏中参数是没有类型的,实参可以是任意类型

 

使用枚举 和使用#define定义常量  和const关键字的区别(从优缺点比较)
#Define指令

优点:申明一次 多次使用;占用内存少,因为无需在内存中分配变量空间
缺点:唯一的缺点是大多数调试程序无法检查用#define声明的常量

枚举
优点:
易于维护
易于阅读
易于调试
缺点:占用更多的内存:因为使用enum关键字需要为存储的变量分配内存

const关键字
const定义符号常量 有类型,在局部常量中仅限于该函数体,且有分号

局部变量与全局变量区别

(1)变量类型:局部变量可以是auto,register,static声明的自动类型变量,而局部变量只能是static声明的静态类变量
(2)生存周期:局部变量在自己作用域可见,而全局变量在整个程序生存周期可见
(3)内存分配方式:局部变量是动态分配,位于线程堆栈中,如果没有初始化则视当前内存中所存放的值而定;全局变量是静态分配,如果没有初始化值则默认为0;