宏与函数的区别:
(1)内存堆栈:调用函数时 地址放入堆栈,函数执行完后将调用函数的地址从堆栈返回给程序;而宏展开是使用取代标识直接将宏名取代
(2)时间效应:调用函数需要现场保护 和恢复现场,需要较多时间,但不会使目标程序变长;宏展开在编译时运行,不占用运行时间,但会使目标程序变长
(3)参数传递:调用有参函数时,先将实参的值复制一份,然后将复制的值传给形参;展开有参宏直接将实参置换形参
(4)参数类型:有参函数形参必须指定类型;而有参宏中参数是没有类型的,实参可以是任意类型
使用枚举 和使用#define定义常量 和const关键字的区别(从优缺点比较)
#Define指令
优点:申明一次 多次使用;占用内存少,因为无需在内存中分配变量空间
缺点:唯一的缺点是大多数调试程序无法检查用#define声明的常量
枚举
优点:
易于维护
易于阅读
易于调试
缺点:占用更多的内存:因为使用enum关键字需要为存储的变量分配内存
const关键字
const定义符号常量 有类型,在局部常量中仅限于该函数体,且有分号
局部变量与全局变量区别
(1)变量类型:局部变量可以是auto,register,static声明的自动类型变量,而局部变量只能是static声明的静态类变量
(2)生存周期:局部变量在自己作用域可见,而全局变量在整个程序生存周期可见
(3)内存分配方式:局部变量是动态分配,位于线程堆栈中,如果没有初始化则视当前内存中所存放的值而定;全局变量是静态分配,如果没有初始化值则默认为0;
自从看到一个命令在我的手下,蹦的一下------------我就笑了