在C#中,#define
指令定义了一个符号,例如,以下行定义了一个符号“DEBUG”:
#define DEBUG
此符号的范围是定义它的文件。
在C++中,可以定义预处理符号(/ D“DEBUG”)以获得相同的效果。但是/ D是项目范围的设置开关。
我的问题是,如何在C++中定义文件本地的符号?
最佳答案
C和C++中的#define
可用,但是它不会创建符号,而是会创建预处理器宏,这实际上是一种文本替换操作,该操作发生在编译器甚至没有看到源文件之前。
在C++文件中创建文件本地符号的通常方法是使用匿名 namespace ,例如
namespace
{
const int SOME_LOCAL_INT = 3;
const std::string SOME_LOCAL_STRING("Blah");
}
使用匿名 namespace 可确保该符号在定义该符号的编译单元之外不可见。但是请注意,如果您在头文件中定义匿名 namespace ,则包含该头文件的所有C++文件都可以访问其中包含的符号的副本,因此最好将匿名 namespace 放入.cpp文件中,以确保他们确实是本地人。