宏与内联

问题描述

  1. 有人可以用示例解释内联函数和宏之间的区别吗?

  2. 什么时候应使用?

  3. 是否正确地说宏也是内联的(真/假)

尽管Macro和Inline有很多答案,但是我对这些问题仍不清楚。

解决方法

  1. 内联函数是函数。它们仅具有一个附加的inline属性,以提示编译器内联这些函数作为优化可能会很好。据说编译器甚至可能不会听。从您的角度来看,内联函数等于100%。这是编译器的一种优化技术。
    宏是代码生成模板。您定义一个模板,例如#define ADD_ONE(x) x = x + 1;,预处理器(而不是编译器)将简单地用模板字符串替换这些字符串。宏的意思是“字符串替换”(有一些规则)。
  2. 宏应该是您的最后选择。当您以其他方式重复不需要重复的代码时,请使用它们。
  3. 是非。宏只是字符串替换。因此代码是内联的。内联函数可能不是内联的(请参阅#1),因此它们不是“也”内联的。我应该添加内联代码,这意味着在运行该代码时不会进行任何函数调用。