C++ 内联函数

C++ 内联函数,c++,macros,inline,C++,Macros,Inline,可能重复: 您好,有人能解释一下它到底是什么意思吗?它与常规宏有什么区别(我知道它在编译时工作,而不是预处理器,但又怎么样?)提前感谢您的帮助,在google中查看了一下,但没有找到可以理解的内容(假设您在这里谈论的是C/C++) 内联函数将其代码复制到调用它的点,就像宏一样 使用内联函数而不是宏来实现这一点的主要原因是宏语言比实际的C/C++代码弱得多;编写可理解、可重用、无缺陷的宏比较困难。宏不会创建词法作用域,因此其中的变量可能会与使用它的作用域中的变量发生冲突。它不检查其参数的类型。很

可能重复:

您好,有人能解释一下它到底是什么意思吗?它与常规宏有什么区别(我知道它在编译时工作,而不是预处理器,但又怎么样?)提前感谢您的帮助,在google中查看了一下,但没有找到可以理解的内容(假设您在这里谈论的是C/C++)

内联函数将其代码复制到调用它的点,就像宏一样

使用内联函数而不是宏来实现这一点的主要原因是宏语言比实际的C/C++代码弱得多;编写可理解、可重用、无缺陷的宏比较困难。宏不会创建词法作用域,因此其中的变量可能会与使用它的作用域中的变量发生冲突。它不检查其参数的类型。很容易引入意外的语法错误,因为宏所做的基本上就是搜索和替换

此外,IIRC,编译器可以选择忽略内联指令,如果它认为内联指令真的是愚蠢的;它不能用宏实现这一点

或者,用一种更加自以为是和简短的方式来重新表述:宏(在C/C++中,不是,比如说,Lisp方言)是一个可怕的乱七八糟的东西,内联函数不允许您使用它们


另外,请记住,将函数标记为内联通常不是一个好主意。编译器通常会内联或不内联,视情况而定;通过将一个函数标记为内联函数,您将接管一个低级函数的责任,而在大多数情况下,编译器将比您了解更多。

和之间有很大的区别:

  • 内联只是编译器的一个提示 该函数可能是内联的。信息技术 但这并不保证会发生
  • 编译器可能不支持内联函数 用内联标记
  • 宏调用不执行 类型检查,因此宏不是类型 安全的
  • 使用函数而不是宏是错误的 更有可能给你一个美好的 可理解的编译器输出 如果有错误
  • 调试函数更容易, 使用宏会使调试程序复杂化 很多。大多数编译器都会为您提供 启用或禁用的选项 内联,这是不可能的 宏

< C++中的一般规则是,尽可能避免宏。

你在说什么语言?VBA?