我想在我的代码来定义日志级别:不需要重新定义
#define INFO 1
#define WARNING 2
#define ERROR 4
#define DEBUG 8
但在其他一些标准的Microsoft库错误已经被定义,看上去就像换句话说也是保留。如何处理这种情况?
我想在我的代码来定义日志级别:不需要重新定义
#define INFO 1
#define WARNING 2
#define ERROR 4
#define DEBUG 8
但在其他一些标准的Microsoft库错误已经被定义,看上去就像换句话说也是保留。如何处理这种情况?
不幸的是,微软定义了很多宏,无论你喜不喜欢它们,它们都会被注入到你的代码中。所以你最好不要重复他们的错误并避免定义宏。
您可以做的最好的事情是定义常量而不是宏,并将它们放在名称空间中以避免名称冲突。例如:
namespace Log
{
const int Info = 1;
const int Warning = 2;
const int Error = 4;
const int Debug = 8;
}
那么你会在你的代码中使用它们作为Log::Info
,Log::Error
等。
编辑:由于红花在评论中指出,你很可能会在这种情况下,最好使用enum
:
enum LogLevel
{
Info = 1;
Warning = 2;
Error = 4;
Debug = 8;
}
在这种情况下,你不需要用enum
类型的前缀值名称,只需使用此类型的变量即可。例如:
LogLevel level = Warning;
这有提供类型安全的优势。您也可以重复使用其他enum
的名称。
'枚举'会在这里更好。 – 2013-01-03 14:36:30
@Tinctorius是的,为此目的会更好。我正在更新我的答案。 – Gorpik
它提供的另一个优点是'const int'可能被视为一个全局变量,取决于它的用途('int * p =(int *)&Warning; * p = 0')。 'const int's只不过是'int',通过这个名字*有限制访问*,优化器必须说服底层存储在内联之前永远不会改变。 – 2013-01-03 14:57:28
你想在这种情况下最终的结果是什么?你有什么尝试? – 2013-01-03 14:23:36