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

时间:2015-11-14 15:47:34

标签: c++ standards c-preprocessor

我想知道是否有关于在c ++语言中使用define的官方建议,最好在标题或源文件中定义吗?
我要求知道是否存在任何官方标准,或者它是否仅仅是主观的...我不需要整套标准,但源头或指南的链接就足够了。

后期编辑:
constconstexpr成为现状这一事实的解释是什么,我指的是define用作避免重复输入的方法,我在脑海中清楚地表明程序员应该充分利用c ++ oop编译器的潜力。另一方面,如果它如此恐惧,为什么不完全删除它?我的意思是,据我所知,define仅用于条件编译,尤其是在使相同的代码在不同的编译器上工作时。 次要的,微小的问题,错误的可能性也是java没有真正的C风格define的主要原因?

1 个答案:

答案 0 :(得分:2)

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

  1. 避免他们
  2. 将它们用于标题文件中的公共"include guard" pattern
  3. 否则,请不要使用它们,除非您可以解释,为什么您使用的是#define而不是constconstexpr,或内联或模板功能等而是。
  4. 使用它们允许从编译器命令行提供编译时选项,但仅当选项作为运行时选项不可行或不可取时。
  5. 当您使用的库需要使用它们时使用它们(例如:禁用assert() function
  6. 一般而言,将所有内容放在最狭窄的范围内。对于#define宏的某些用法,这意味着{。1}}就在.cpp文件中的函数之前,然后是函数之后的#define
  7. #undef的确切用例确定它是否应位于#define.h文件中。但请注意,大多数用例实际上违反了上述3.并且您实际上不应该使用.cpp