【发布时间】:2020-03-27 02:43:46
【问题描述】:
可以在所有翻译单元中进行#define 或类似的预处理器定义吗?
头文件实现对于非常小的库非常有用,因为所有代码都可以通过具有以下结构的单个头文件来包含和分发:
// library.h
void libFunc(); // forward decl
#ifdef IMPLEMENT_LIBRARY
int libState;
volatile int libVolState; // library state exposed to external processes
void libFunc(){
// definition
}
#endif
然而,这种结构要求用户在标头仅包含在他们的一个翻译单元中之前定义IMPLEMENT_LIBRARY,这意味着它不能放在用户的头文件中,并且可能会让不这样做的人有点困惑'完全熟悉 C++ 的编译规则。
如果有办法在所有 TU 中定义 IMPLEMENT_LIBRARY,这可以通过
#ifndef IMPLEMENT_LIBRARY
#defineToAllUnits IMPLEMENT_LIBRARY
// library state
// definitions
#endif
是否存在这样的机制,或者当前的单头系统是否达到预期效果?
【问题讨论】:
-
大多数编译器都支持
-D选项来定义符号 -
@AndyG 我不认为这就是 OP 的意思。该代码应该有条件地为其他翻译单元定义宏。
标签: c++ c-preprocessor translation-unit