以下是两个程序,当半径作为参数传递时给出圆的面积。但是在第一个程序 macro.c 中,我使用了一个宏来完成这项工作,而在第二个程序 function.c 中,我使用了一个函数来完成这项工作。
我熟悉函数的使用及其细微差别。但是接受参数的宏呢?我们什么时候应该更喜欢它们而不是功能?我们什么时候应该避免它们?哪一个性能更好?我知道如果在程序中多次使用宏,宏方法会导致代码庞大,而对于函数,同一个函数会被多次调用。但除了这个微不足道的差异之外,我们还需要注意哪些其他问题?
//macro.c
#include<stdio.h>
#define AREA(x) (3.14*x*x)
int main(void)
{
float r1=6.25,r2=2.5,a;
a=AREA(r1);
printf("\nArea of circle=%f",a);
a=AREA(r2);
printf("\nArea of circle=%f",a);
}
//function.c
#include<stdio.h>
float area(float);
int main(void)
{
float r1=6.25,r2=2.5;
printf("\nArea of circle=%f",area(r1));
printf("\nArea of circle=%f",area(r2));
}
float area(float radius)
{
return 3.14*radius*radius;
}
最佳答案
宏的一些反面:
- 使用宏,您将失去所有类型安全。传递的参数不会像
inline
函数那样进行类型检查。 - 由于宏是纯文本替换,它们可能会产生副作用。
- 一个宏可能会被多次计算并导致错误。
因此最好避免使用它们,而是使用 inline
函数。
内联
函数确实有它们自己的另一面:
- 不保证它们每次都被
内联
。
但考虑到比较,inline
肯定比宏得分高。
关于c - 为什么我们应该或不应该更喜欢接受参数的宏而不是做同样工作的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16433133/