在 C++ 中定义的最佳实践是什么?

What is the best practice for define in C++?

我想知道是否有关于在 c++ 语言中使用 define 的任何官方建议,究竟是在头文件还是源文件中定义最好?
我问这个是为了知道是否有任何官方标准可以遵守,或者它只是主观的...我不需要整套标准,但指南的来源或 link 将够了。


后期编辑:
constconstexpr 已成为现状,我指的是 define 用作避免重复键入的手段,这在我看来很清楚,程序员应该充分利用 C++ oop 编译器的潜力。另一方面,如果它如此令人恐惧,为什么不将其完全移除呢?我的意思是,据我所知,define 仅用于条件编译,尤其是在使相同的代码在不同的编译器上工作时。
次要的小问题,潜在的错误也是 java 没有真正的 C 风格 define?

的主要原因

#define C++ 使用指南的简短列表,第 2、4、6 和 7 点实际解决了问题:

  1. 避开它们
  2. 将它们用于头文件中的通用 "include guard" pattern
  3. 否则,不要使用它们,除非你能解释为什么你使用 #define 而不是 constconstexpr、内联函数或模板函数等, 相反。
  4. 使用它们允许从编译器命令行提供编译时选项,但仅当 运行-time 选项不可行或不可取时。
  5. 当您使用的任何库需要使用它们时使用它们(例如:禁用 assert() function
  6. 一般来说,把所有的东西都放在尽可能小的范围内。对于 #define 宏的某些用途,这意味着 #define 就在 .cpp 文件中的函数之前,然后 #undef 就在函数之后。
  7. #define 的确切用例决定了它应该在 .h 还是在 .cpp 文件中。但是请注意,大多数用例实际上都违反了上面的 3.,您实际上不应该使用 #define.