🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

941閲覧

エラー情報の管理について

__ook

総合スコア49

C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/12/11 02:49

エラーコードとエラー情報をまとめて管理するため、現在は

cpp

1const std::unordered_map<std::string, std::string> ERROR_MESSAGE 2{ 3 { "E00001", "起動に失敗しました" }, 4 { "E00002", "引数の数が不正です" }, 5 { "E00003", "メモリ保持に失敗しました" }, 6};

以上のように管理をしています。

ただ完全に自分で考えたもののため、これがベストな手法なのかわかりません。
よりよい手法等ございましたらお教えいただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

「エラーコード」を文字列で規程するのはあまり一般的ではありません。文字列はタイプミスが怖いからです。"E0000l""E00001"を読み違えることは多いと思います。(前者の最後の文字は小文字のL)
なかなか取れないバグになりますが、エラーコードのバグは正直最悪です。
エラーケースのテストは一般に非常に手間がかかる割にプログラムの機能向上に効果的ではないため、十分なテストができないことが少なくないからです。

さて、「エラーコード」を何故割り当てるのか?考えてみるのも一つです。
発生したエラーの内容を見てプログラムが自動的にリカバリ処理を行うケースではエラーコードを割り当てることで、タイプミスによるバグを軽減できます。

逆にユーザへどんなエラーが発生したかを通知し、ユーザが手動でリカバリするケースではエラーコードは不要ですね。
例えば、gccはエラー検出時、エラー・メッセージを出力しますが、msvcのようなエラー・コードは出力しません。必要ないからだと思います。
このような時はエラーコードそのものを定義しないということも視野に入ると思います。

私自身は後者を主に使い、自動リカバリや後処理で分岐が必要な場合にだけ前者を補助的に使っています。全てのエラー・メッセージにエラー・コードを割り当てても、自動リカバリ等に有効なスマートなコード割当のあまりの難しさに断念したという感じですね。

投稿2019/12/11 03:06

編集2019/12/11 03:31
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

__ook

2019/12/11 05:05

回答ありがとうございます。 つまりエラーコードは不必要な場合が多い、かつ必要な場合は数字で記述すべき、ということでしょうか。
Chironian

2019/12/11 05:14

「記述すべき」かどうかは人によって見解は異なると思います。私はそのようにしているという例を示したという内容です。もし、同じように感じられるのであれば、_miyaさんも同じようにすると良いですし、そうでもないなら、同じようにする必要はないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問