c语言带参数的宏
Ⅰ 急(c语言)比较带参的宏与带参的函数之间的区别
区别:
1、宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已。
2、宏进行定义时不会考虑参数的类型。
3、参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。
4、参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作。
5、参数宏在定义时要多加小心,多加括号。
6、函数只在目标文件中存在一处,比较节省程序空间。
7、函数的调用会牵扯到参数的传递,压栈/出栈操作,速度相对较慢。
8、函数的参数存在传值和传地址(指针)的问题,参数宏不存在。
Ⅱ C语言中的宏定义怎么用
C语言中的宏定义用法分为两种。
1、不带参数的宏定义比较简单,就是用一个指定的标识符来代表一个字符串。它的一般形式为“#define 标识符 字符串”,例如#define E 2.718281828459。这种方法使用户能以一个简单的名字代替一个长的字符串。
2、带参数的宏定义不是仅仅进行简单的字符串替换,还要进行参数替换。其定义的一般形式为;“#define 标识符(宏名)(参数表) 字符串”,字符串中包含在括号中所指定的参数。例如#define S(a,b) a*b area=S(3. 2)。
(2)c语言带参数的宏扩展阅读:
宏定义只占编译时间,函数调用则占用运行时间(分配单元,保存现场,值传递,返回),每次执行都要载入,所以执行相对宏定义会较慢。
使用宏定义次数多时,宏定义展开后源程序很长,因为每展开一次都使程序增长,但是执行起来比较快一点(这也不是绝对的,当有很多宏定义展开,目标文件很大,执行的时候运行时系统换页频繁,效率就会低下)。而函数调用不使源程序变长。
Ⅲ C语言函数问题。带参数的宏ab这里是实参,下面mn也是实参,所以这里是下面的实参传给上面的实参吗
普通函数的声明,定义里用的叫形参,普通函数调用时,调用语句里的参数叫实参。
宏与它们不一样,宏在预编译期间,做的工作 是 替代 (字符替代,名字替代)。
#defind area(a,b) (PI * a * b) 里面的 PI 要被 前面PI 的 宏定义 替代成:
#defind area(a,b) ((asin(1) * 2) * a * b)
然后程序里的 s = area(m,n); 要用 area(a,b) 的 宏 替代,同时要把 实际参数 m,n代入,变成:
s = ((asin(1) * 2) * m * n);
上述工作完成后,编译器,再把 这个替代工作完成后的 源程序, 编译和链接成 可执行程序 .exe 文件。