コードでログ レベルを定義したいと思います。
#define INFO 1
#define WARNING 2
#define ERROR 4
#define DEBUG 8
しかし、他の標準的な Microsoft ライブラリでは ERROR が既に定義されており、他の単語も予約されているようです。このような状況に対処するにはどうすればよいですか?
コードでログ レベルを定義したいと思います。
#define INFO 1
#define WARNING 2
#define ERROR 4
#define DEBUG 8
しかし、他の標準的な Microsoft ライブラリでは 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
。