Google C++ Style Guide指南建议不得在 .h
( header )文件中定义宏。这样做的缺点是什么?
最佳答案
预处理器按顺序将所有包含的源文件连接在一起。如果您不取消定义宏,它可以应用于首次定义后的任何源。
由于 header 通常是库的公共(public) API,因此您在 header 中定义的任何宏都可能最终出现在其他人的代码中,从而做出意想不到的事情。
因为意想不到的事情是好的软件的对立面,你应该:
- 不使用宏(地道的 C++ 真的不应该)
- 在私有(private)范围内定义它们(总是喜欢私有(private))或
- 使用后立即取消定义它们(尽管这会使它们对您自己的代码基本上无用)
最佳解决方案取决于您的用例。包括守卫和其他简单、安全的定义通常被排除在外(类似函数的宏更可能导致问题,但您仍然可以做一些愚蠢的事情,比如定义 TRUE FALSE)。
您还可以考虑有条件地定义宏,以便它们出现在您的代码中但不会成为公共(public) API 的一部分。在构建过程中检查变量集或将宏保留在单独的 header 中允许其他人有选择地、明确地和有意地包含它们,如果宏有助于避免大量样板文件,这会很方便。
关于c++ - 为什么不建议在头文件中定义宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30742148/