在 C++ 中定义的最佳实践是什么?
What is the best practice for define in C++?
我想知道是否有关于在 c++ 语言中使用 define 的任何官方建议,究竟是在头文件还是源文件中定义最好?
我问这个是为了知道是否有任何官方标准可以遵守,或者它只是主观的...我不需要整套标准,但指南的来源或 link 将够了。
后期编辑:
const
和 constexpr
已成为现状,我指的是 define
用作避免重复键入的手段,这在我看来很清楚,程序员应该充分利用 C++ oop 编译器的潜力。另一方面,如果它如此令人恐惧,为什么不将其完全移除呢?我的意思是,据我所知,define
仅用于条件编译,尤其是在使相同的代码在不同的编译器上工作时。
次要的小问题,潜在的错误也是 java 没有真正的 C 风格 define
?
的主要原因
#define
C++ 使用指南的简短列表,第 2、4、6 和 7 点实际解决了问题:
- 避开它们
- 将它们用于头文件中的通用 "include guard" pattern
- 否则,不要使用它们,除非你能解释为什么你使用
#define
而不是 const
、constexpr
、内联函数或模板函数等, 相反。
- 使用它们允许从编译器命令行提供编译时选项,但仅当 运行-time 选项不可行或不可取时。
- 当您使用的任何库需要使用它们时使用它们(例如:禁用
assert()
function )
- 一般来说,把所有的东西都放在尽可能小的范围内。对于
#define
宏的某些用途,这意味着 #define
就在 .cpp 文件中的函数之前,然后 #undef
就在函数之后。
#define
的确切用例决定了它应该在 .h
还是在 .cpp
文件中。但是请注意,大多数用例实际上都违反了上面的 3.,您实际上不应该使用 #define
.
我想知道是否有关于在 c++ 语言中使用 define 的任何官方建议,究竟是在头文件还是源文件中定义最好?
我问这个是为了知道是否有任何官方标准可以遵守,或者它只是主观的...我不需要整套标准,但指南的来源或 link 将够了。
后期编辑:
const
和 constexpr
已成为现状,我指的是 define
用作避免重复键入的手段,这在我看来很清楚,程序员应该充分利用 C++ oop 编译器的潜力。另一方面,如果它如此令人恐惧,为什么不将其完全移除呢?我的意思是,据我所知,define
仅用于条件编译,尤其是在使相同的代码在不同的编译器上工作时。
次要的小问题,潜在的错误也是 java 没有真正的 C 风格 define
?
#define
C++ 使用指南的简短列表,第 2、4、6 和 7 点实际解决了问题:
- 避开它们
- 将它们用于头文件中的通用 "include guard" pattern
- 否则,不要使用它们,除非你能解释为什么你使用
#define
而不是const
、constexpr
、内联函数或模板函数等, 相反。 - 使用它们允许从编译器命令行提供编译时选项,但仅当 运行-time 选项不可行或不可取时。
- 当您使用的任何库需要使用它们时使用它们(例如:禁用
assert()
function ) - 一般来说,把所有的东西都放在尽可能小的范围内。对于
#define
宏的某些用途,这意味着#define
就在 .cpp 文件中的函数之前,然后#undef
就在函数之后。 #define
的确切用例决定了它应该在.h
还是在.cpp
文件中。但是请注意,大多数用例实际上都违反了上面的 3.,您实际上不应该使用#define
.