可以跨所有翻译单元进行#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++ 编译的人来说可能有点混乱规则。
如果有一种方法可以IMPLEMENT_LIBRARY
跨所有 TU 进行定义,则可以使用以下命令自动完成
#ifndef IMPLEMENT_LIBRARY
#defineToAllUnits IMPLEMENT_LIBRARY
// library state
// definitions
#endif
是否存在这样的机制,或者当前的单头系统是否与它将获得的一样好?