💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
#### 带参宏 #### 带参宏就是带参数的宏,这样除了简单的宏替换之外,还要进行参数替换 #include <stdio.h> #define S(a) a*a int main() { printf("正方形的面积为:%d平方厘米",S(8));//a是形参,在执行替换的同时,会用实参来代替形参 return 0; } 注意: 1. 定义有参宏时,宏名和参数之间不能有空格,否则就变成无参宏了 2. 带参宏的参数不同于函数中的参数,带参宏的参数只是简单的替换,因此讲一个表达式传递给带参宏,如果不加括号的话,会出问题 代码: #include <stdio.h> #define S(a) (a)*(a) int main() { printf("正方形的面积为:%d平方厘米",S(8+2)); return 0; } #### 带参宏与函数的不同: - 1. 带参宏只是将形参和实参进行简单替换,不需要求出实参的值,函数要先求出实参的值,再传给形参 - 2. 函数被调用时,油系统为函数的形参分配内存,带参宏被展开只是在预处理时进行简单替换,并不占用内存 - 3. 函数有返回值,带参宏只是简单替换,没有返回值的概念,但是可及间接的实现的返回一个值,如将带参宏的宏体表达式的结果作为返回值 - 4. 函数有类型,带参宏只是简单替换,不需要类型 - 5. 多个宏被展开会使源代码增长,多个函数被调用不会使源代码增长 - 6.多个宏被展开会使程序的预处理时间增长,但不会增加程序的运行时间,多个函数被调用会使程序运行时间增长,但不会增加程序的预处理时间