【发布时间】:2015-11-14 15:47:33
【问题描述】:
我想知道是否有关于在 c++ 语言中使用 define 的官方建议,确切地说是在你的头文件或源文件中定义最好吗?
我想知道是否有任何官方标准可以遵循,或者仅仅是主观的......我不需要整套标准,但指南的来源或链接就足够了。
稍后编辑:const 和 constexpr 已成为现状的事实是什么解释,我指的是 define 用作避免重复输入的手段,我很清楚程序员应该充分利用c++ oop 编译器。另一方面,如果它如此恐惧,为什么不将它完全删除呢?我的意思是,据我了解,define 仅用于条件编译,尤其是在使相同的代码在不同的编译器上工作时。
次要的,小问题,潜在的错误也是java没有真正的C风格define的主要原因?
【问题讨论】:
-
最小范围。如果它只用在一个 C 文件中,把它放在那里。如果多次使用,放在头文件中。
-
这是主观的,但有些约定如果不遵守会很愚蠢。始终对宏使用 ALL_CAPS 名称(出于我在 stop the constant SHOUTING 中给出的原因,切勿对非宏使用 ALL_CAPS 名称)
-
这不是官方的,但只要避免使用 c++ 就可以了。有很少见的用例。
-
@πάνταῥεῖ:这有点过分......当然,如果内联函数或
const变量或模板或其他任何不错的选择,它们应该是首选,但我认为在非常本地的情况下没有什么不好(=在使用前定义,之后立即未定义)宏来节省一些输入并避免由于复制粘贴代码而导致的错误。 -
@MatteoItalia 这只是一个示例。宏(甚至在本地使用)比常规变量定义或内联函数更容易出错,因为它们只处理文本,这为意外结果留下了很多空间。我提到有 rare 有效的用例。正如您所提到的,标记化就是其中之一。
标签: c++ standards c-preprocessor