c语言有没有把一个宏作为函数参数的。
发布时间:2025-05-14 08:03:55 发布人:远客网络
一、c语言有没有把一个宏作为函数参数的。
1、宏只是编译前简单替换代码内容,而函数真正产生代码。
2、宏是编译期的,函数是运行期的;
3、宏不是实体,而函数是一个可寻址的实体;
4、宏只是编译期替换,在程序里每遇到S(a,b),就用a*b代替,a和b两个实体并没有由宏实际产生,而函数S会在栈中定义两个对象a和b。
5、宏没有生存期、作用域之类的概念,而函数就有。
6、函数在运行过程中会在栈中产生函数调用过程活动记录,而宏则没有。
7、所以说宏作为函数参数是不可行的
二、在C语言中 宏定义是什么
1、在C语言源程序中,允许用一个标识符来表示一个字符串,称为宏,宏定义是由源程序中的宏定义命令完成的,宏替换是由预处理程序自动完成的。宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。
2、宏(Macro),是一种批量处理的称谓。计算机科学里的宏是一种抽象,它根据一系列预定义的规则替换一定的文本模式。
3、计算机语言如C语言或汇编语言有简单的宏系统,由编译器或汇编器的预处理器实现。C语言的宏预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C程序员可以获得更精巧的宏。
三、c语言宏定义函数如何调用(里面含参数可以当函数用吗)
使用宏函数或者宏函数时,注意如下几点:
1.宏函数的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以传参时要格外小心。
2.宏函数定义要注意格式,尤其是括号。
如果上面的宏函数写成#define MAX(a, b)(a>b?a:b),省去内层括号,则宏展开就成了k=(i&0x0f>j&0x0f?i&0x0f:j&0x0f),运算的优先级就错了。同样道理,这个宏定义的外层括号也是不能省的。若函数中是宏替换为++MAX(a,b),则宏展开就成了++(a)>(b)?(a):(b),运算优先级也是错了。
3.宏函数往往会导致较低的代码执行效率。
若是普通函数,则通过递归,可取的最大值,时间复杂度为O(n)。但若是宏函数,则宏展开为( a[n]>max(n-1)?a[n]:max(n-1)),其中max(n-1)被调用了两遍,这样依此递归下去,时间复杂度会很高。