宏和函数

一   宏: 一种批量处理的称谓,一般说来,宏是一种规则或模式,或称语法替换,用于说明某一特定输入 ,如何根据预定义规则转换成对应的输出,这种替换在预编译时进行,我们把它称做宏展开。

计算机函数:为一个固定的一个程序段,或称其为一个子程序 ,它在可以实现固定运算的同时,还带有一个入口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序,供计算机处理,所谓出口,就是指函数的函数值,在计算机求得之后,由此口带回给调用它的程序。

二   其实函数和宏这两者并没有什么关系,那为什么在这里我要把这两在这里说呢?

请看宏的用法:

   #define 宏名 一串符号

    #define pi 3.14

    #define Max(x,y)   ( (x)>(y) ?(x):(y))

   可以看出宏名可以是带参数的也可以是不带参数的,我们可以用带参数的宏来替换一些用函数来编写的程序

如  int Max(int x,int y)

{

    return  x>y)?x:y;
}

而上面这个函数我们也可以用#define Max(x,y)  ( (x)>(y) ?(x):(y))来代替。
那用宏也可以完成我们函数可以完成的功能,那我们可不可以不要使用函数了,一直使用宏呢,这当然是不行的。

首先因为宏是在预编译阶段完成的替换,即就是在正式编译之前我们已经完成了宏的替换,那如果我们出现了语法错误,那这时我们的编译器是无法察觉的。这可是很严重的。还有如果一个函数的功能很复杂,如果我们使用宏,会使我们的主函数中含有大量的代码,这是不建议的。如果一个程序中多次使用这个宏,就会有大量重复的代码。

三   那我们什么时候该使用宏,什么时候该使用函数呢?

当我们所实现的函数功能很简单时,我们可以考虑使用宏,如果复杂那就使用函数吧,因为执行一个函数是需要花费时间和空间的,如果功能简单,花费的时间和空间就不值得了,那如果复杂,使用宏会使主程序中含有大量的代码,而且这会非常考验我们编程能力的,因为使用宏是不检查对错的。这就意味着你要自己排错了,假如,你使用一个空指针的话,那可就糟了。

还有宏与函数相比,宏的执行速度快,函数的执行速度慢。

    在传参是,宏没有类型限制,而函数传参则有类型限制,但宏会有副作用,(这时我们要给参数加括号来避免),但而函数没有。

这就是宏和函数,我们在编程时,是使用函数还是宏,我们要自己权衡。



一   宏: 一种批量处理的称谓,一般说来,宏是一种规则或模式,或称语法替换,用于说明某一特定输入 ,如何根据预定义规则转换成对应的输出,这种替换在预编译时进行,我们把它称做宏展开。

计算机函数:为一个固定的一个程序段,或称其为一个子程序 ,它在可以实现固定运算的同时,还带有一个入口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序,供计算机处理,所谓出口,就是指函数的函数值,在计算机求得之后,由此口带回给调用它的程序。

二   其实函数和宏这两者并没有什么关系,那为什么在这里我要把这两在这里说呢?

请看宏的用法:

   #define 宏名 一串符号

    #define pi 3.14

    #define Max(x,y)   ( (x)>(y) ?(x):(y))

   可以看出宏名可以是带参数的也可以是不带参数的,我们可以用带参数的宏来替换一些用函数来编写的程序

如  int Max(int x,int y)

{

    return  x>y)?x:y;
}

而上面这个函数我们也可以用#define Max(x,y)  ( (x)>(y) ?(x):(y))来代替。
那用宏也可以完成我们函数可以完成的功能,那我们可不可以不要使用函数了,一直使用宏呢,这当然是不行的。

首先因为宏是在预编译阶段完成的替换,即就是在正式编译之前我们已经完成了宏的替换,那如果我们出现了语法错误,那这时我们的编译器是无法察觉的。这可是很严重的。还有如果一个函数的功能很复杂,如果我们使用宏,会使我们的主函数中含有大量的代码,这是不建议的。如果一个程序中多次使用这个宏,就会有大量重复的代码。

三   那我们什么时候该使用宏,什么时候该使用函数呢?

当我们所实现的函数功能很简单时,我们可以考虑使用宏,如果复杂那就使用函数吧,因为执行一个函数是需要花费时间和空间的,如果功能简单,花费的时间和空间就不值得了,那如果复杂,使用宏会使主程序中含有大量的代码,而且这会非常考验我们编程能力的,因为使用宏是不检查对错的。这就意味着你要自己排错了,假如,你使用一个空指针的话,那可就糟了。

还有宏与函数相比,宏的执行速度快,函数的执行速度慢。

    在传参是,宏没有类型限制,而函数传参则有类型限制,但宏会有副作用,(这时我们要给参数加括号来避免),但而函数没有。

这就是宏和函数,我们在编程时,是使用函数还是宏,我们要自己权衡。





猜你喜欢

转载自blog.csdn.net/weixin_40797414/article/details/80286026