c++ - 为什么在 Doom 源代码中有#define ID_INLINE 内联定义?

标签 c++ macros inline c-preprocessor

在毁灭战士3的源代码中,使用了ID_INLINE宏来代替内联,声明为#define ID_INLINE inline。有什么理由使用这个宏而不是简单的内联?

最佳答案

出于同样的原因,许多其他软件包使用“内联宏”。它有两个目的:

  1. 它为程序员提供了一个简单的地方来“关闭所有内联”(这有时在调试时非常有用)- 您可以通过执行 #undef ID_INLINE 来“按文件”执行此操作通过 #define ID_INLINE - 或更改整体宏以影响整个项目。
  2. 一些(旧的)编译器不支持标准的inline 关键字,或者您可能需要使用特殊的魔法来说服编译器将函数内联。因此,使用“内联宏”可以在整个项目中对其进行更改(至少在程序员遵循编码标准的情况下)。

对于现代编译器,前者无疑是重点。

关于c++ - 为什么在 Doom 源代码中有#define ID_INLINE 内联定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20934281/

相关文章:

C++ 当我从另一个类的方法调用一个方法时它起作用但不编辑第一个方法的类变量

C++:如何将十六进制字符转换为无符号字符?

qt - 如何使编译器检查给SIGNAL()的内容?

c++ - 是否可以在没有包含保护的情况下编写头文件,并且没有多个定义错误?

Django 内联模型管理过滤器外部字段

HTML:更改文本字符串中特定单词的颜色

css - 背景图像拉伸(stretch)的内联样式

c++ - 位域操作中的 operator[] 重载?

c++ - 宏 C++ #define Examples(obje) (::f(s, (obje), arg1, arg2, arg3))

c++ - 用C++做了一个简单的链表,可执行文件太大了?