宏函数与普通函数的比较

来源:互联网 发布:个人房源采集软件 编辑:程序博客网 时间:2024/06/16 05:29

一. 计算机里的宏

     一般来说,所谓宏,就是将一些命令组织在一起,作为一个单独命令完成一个特定的任务。

     在计算机科学中,宏是一种抽象的规则模式,或称为语法替换。根据一系列预定义的规则进行字符串的替换。

二. 宏定义

1、宏定义是C程序提供的预处理功能之一。宏函数由编译器在编译预处理过程中进行处理,称做宏展开。

2、宏定义包括带参数的宏定义和不带参数的宏定义。具体是指用一个指定的标志符来进行简单的字符串替换

     或者进行阐述替换。

(1)不带参数的宏替换

         # define  标识符  字符串

         例  # define  NAME  "zhangyunlong"

(2)带参数的宏定义

          # define  标识符(参数列表) 字符串

         带参的宏函数的定义中允许包含多行指令。当有多行指令时,在每一行指令的末尾要求加上" \ "符号,且该

         符号后面不能加其他任何符号,

         (包括空格),否则将会出现错误。

         例  # define  S(a,b)  a*b   // 在宏定义的末尾不需要加分号

               # define swap(x, y) \

                  x = x + y; \

                  y = x - y; 

三. 使用宏函数的注意事项

(1)宏名一般采用大写字母

(2)宏定义末尾不加分号

(3)宏定义不分配内存

(4)宏与类型无关。宏定义中没有数据类型。

(5)带参数的宏定义中需要注意参数为表达式的情况。合理添加括号。

         例  # define S(r)  r*r

              area=S(a+b);

              第一步换为 area=r*r; 

              第二步被换为 area=a+b*a+b; 运算符的结合顺序发生变化,结果错误。

              故正确的宏定义是 # define S(r) ((r)*(r))

(6)宏的使用会增加源程序的代码量。

(7)宏的执行在编译过程中,占编译时间,不占运行时间。

四. 宏函数和普通函数的区别

     在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成普通函数,也可以封装成

     宏定义函数。那么究竟是用函数好,还是宏定义好?这就要求我们对二者理解和分析,合理取舍。

     利用一个简单函数辅助理解

     宏定义函数:

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

     普通函数:

     int max ( int a , int b)

     {

          int max;

          max=(a>b)?a:b ;

     }

     显然,在这两种形式的函数中我们会选择宏定义函数来解决问题。原因有两个:

     一,普通函数的调用会带来额外的开销。它需要在内存空间中开辟一个栈空间,来记录函数调用过程中的所有数据。

            这种开销不仅会增加代码量,而且会降低程序的执行效率。而宏定义则没有这步操作。所以考虑代码规模和执行

            速度,我们选用宏定义。

     二,普通函数的参数必须被声明为特定的类型,所以它只能在类型合适的表达式上使用。如果输入的是两个整型的数

            据,则该函数将无法执行。而对于宏函数来说,宏与类型无关,宏函数的展开在程序的预编译过程中,不进行语

            法检查,故使用宏函数时,没有数据类型的限制。

      当然,宏函数也有其无法避免的缺点。在普通函数中,编译一个语句会生成其相对应的一个或多个汇编语言;而在宏

      函数下,这个宏定义本身倒不必编译生成指令,但是代码中出现的每次调用编译生成的指令都相当于一个函数体,而

      不是简单的几条传参指令和call指令。所以,使用宏定义编译生成的目标文件会比较大。



        




  

        

        

        


    


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 驾照过期六个月怎么办 移动预约号码取消怎么办 身份证换地址驾驶证怎么办 刚来成都怎么办居住证 我在外地怎么办身份证 身份证丢在外地怎么办 换领新身份证时旧证丢了怎么办 二代身份证重号怎么办 北京行驶证到期怎么办 北京驾驶证即将过期怎么办 去澳门没有网络怎么办 三个周期未年检怎么办 深圳驾照丢了怎么办 武汉驾照年审过期怎么办 武汉驾照过期了怎么办 科二过不了怎么办 南京身份证到期换新怎么办 过期身份证丢了怎么办 南京驾照过期了怎么办 换驾照身体证明怎么办 学车办理暂住证怎么办 a牌驾照扣分怎么办 b牌驾照扣分怎么办 b驾照扣分了怎么办 考驾照要暂住证怎么办 换驾驶证有色盲怎么办 外籍人员办理就业证怎么办 驾驶证该审过期怎么办 小车证扣满12分怎么办 b证扣满12分怎么办 车过户后保险怎么办 换新轮胎旧轮胎怎么办 驾照一审超一年怎么办 驾驶证年检过期了怎么办 交管12123怎么办进京证 驾照登录密码忘记怎么办 预约密码忘记了怎么办 学驾照密码忘记怎么办 考驾照不识字怎么办 驾校密码忘了怎么办 b证酒驾扣12分怎么办