4

c语言宏定义与普通函数接收参数的区别--值得注意

 2 years ago
source link: https://blog.csdn.net/weixin_46435234/article/details/120519805
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

c语言宏定义与普通函数接收参数的区别--值得注意

iku_ki 2021-09-27 23:32:06 10
分类专栏: c 文章标签: c语言 c++
专栏收录该内容
1 篇文章 0 订阅
#include <stdio.h>
//宏定义接收参数:不会预先计算参数,而是直接将参数带入到返回值中计算
#define QQ(x, y) x *y //2+3*3+1=12

// 普通函数解释参数,会在传递参数的时候预先计算参数,然后带入到函数内部进行计算
int add(int a, int b)
{
  printf("%d\n", a * b); // 5*4=20
  return 0;
}
int main(int argc, char const *argv[])
{
  add(2 + 3, 3 + 1);
  int a = QQ(2 + 3, 3 + 1);
  printf("%d\n", a);
  return 0;
}

传递参数的一摸一样,但是最后的结果却不一样

一、内联函数

c++从c中继承的一个重要特征就是效率。假如c++的效率明显低于c的效率,那么就会有很大的一批程序员不去使用c++了。 在c中我们经常把一些短并且执行频繁的计算写成宏,而不是函数,这样做的理由是为了执行效率,宏可以避免函数调用的开销,这些都有预处理来完成。 但是在c++出现之后,使用预处理宏会出现两个问题:

1 c中也会出现,宏看起来像一个函数调用,但是会有隐藏一些难以发现的错误。和实际的函数调 用不一致 2 面向对象是c++特有的,预处理器不允许访问类的成员,也就是说预处理器宏不能用作类


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK