2

エラー時にユーザーに表示される一意のエラー コードを使用すると便利です。これにより、開発者はエラーの原因を特定しやすくなり (ソース コードでエラー コードを検索するだけです)、時間を節約できます。

例:

void f()
{
  std::cout << "UNIQUE001 " << "Error : The query failed" << std::endl;
}

void g()
{
  f();
}

int main()
{
  g();
  return 0;
}

この例では、ユーザーがエラーを報告しています ("UNIQUE001 エラー: クエリが失敗しました")。開発者は「UNIQUE001」でプロジェクト全体を検索するだけで、エラーがスローされた場所をすぐに見つけることができます。(その間にコードが変更されている可能性があるため、行番号を含むファイルでは十分ではありません)。

それで、質問に対して:コンパイル時(理想的には、プリプロセッサマクロまたはTMPのいずれかを使用)または実行時(ユニットテストなど)にエラーコード文字列の一意性を強制する方法はありますか?

アップデート

これまでの私の最善の試みは、型名とエラー コードに等しい値の文字列を持つ型を作成するマクロを使用して構造体を作成することでした。これは機能し、重複した型のコンパイル時エラーが発生しますが、構造体はどこでも (式などで) 宣言できません。

#define generateerrorcode(code) \
struct code \
{ \
  static const char* value = #code \
}; \

可能であれば、次のような一意のチェック機能を使用できるようにしたいと思います。

void some_function()
{
  std::cout << check_unique("UNIQUE001") << "Error : The query failed" << std::endl;
}
4

2 に答える 2

1

100% 確実にしたい場合は、GUIDと、世の中にある何百万ものジェネレーターの1 つを使用できます

于 2013-01-05T20:37:38.023 に答える
0

あなたは言う:

(その間にコードが変更されている可能性があるため、行番号を含むファイルでは十分ではありません)。

しかし、あなたがそれを自分で処理せず、コンパイラが処理する場合はどうなりますか? すなわち__FILE__、、。__LINE___ __FUNCTION__参照: C++ での __FILE__、__LINE__、および __FUNCTION__ の使用法

ただし、エラーの後、修正する前にコードが変更された場合は失敗します。(ただし、編集履歴が表示される場合があります)

于 2013-01-05T20:43:01.337 に答える