我想在我的代码中定义日志级别:
#define INFO 1
#define WARNING 2
#define ERROR 4
#define DEBUG 8
但是在其他一些标准的微软库中已经定义了 ERROR 并且看起来其他词也被保留了。遇到这种情况怎么处理?
我想在我的代码中定义日志级别:
#define INFO 1
#define WARNING 2
#define ERROR 4
#define DEBUG 8
但是在其他一些标准的微软库中已经定义了 ERROR 并且看起来其他词也被保留了。遇到这种情况怎么处理?
不幸的是,无论你喜欢与否,Microsoft 都定义了许多宏,这些宏会被注入到你的代码中。所以你最好不要重复他们的错误,避免定义宏。
您可以做的最好的事情是定义常量而不是宏,并将它们放在命名空间中以避免名称冲突。例如:
namespace Log
{
const int Info = 1;
const int Warning = 2;
const int Error = 4;
const int Debug = 8;
}
然后你会在你的代码中使用它们Log::Info
,Log::Error
等等。
编辑:正如 Tinctorius 在评论中指出的那样,enum
在这种情况下你可能会更好地使用:
enum LogLevel
{
Info = 1;
Warning = 2;
Error = 4;
Debug = 8;
}
在这种情况下,您不需要在值前面加上enum
类型名称,只需使用这种类型的变量即可。例如:
LogLevel level = Warning;
这具有提供类型安全性的优点。您还可以重用其他enum
s 的名称。