ken*_*yzx 1 c++ c-preprocessor
在C#中,#define指令定义了一个符号,例如,以下行定义了一个符号"DEBUG":
#define DEBUG
Run Code Online (Sandbox Code Playgroud)
此符号的范围是定义它的文件.
在C++中,可以定义预处理符号(/ D"DEBUG")以获得相同的效果.但/ D是项目范围的设置开关.
我的问题是,如何在C++中定义文件本地的符号?
小智 7
#define 在C和C++中可用,但它不创建符号,它创建一个预处理器宏,它本质上是一个文本替换操作,它发生在编译器甚至看到源文件之前.
在C++文件中创建文件本地符号的常用方法是使用匿名命名空间,例如
namespace
{
const int SOME_LOCAL_INT = 3;
const std::string SOME_LOCAL_STRING("Blah");
}
Run Code Online (Sandbox Code Playgroud)
使用匿名命名空间可确保符号在定义它的编译单元外部不可见.但请注意,如果在头文件中定义匿名命名空间,则包含在其中的符号的副本将在包含该头文件的所有C++文件中可访问,因此最好将匿名命名空间放在.cpp文件中以确保他们确实是当地的.