2013-05-26 5 views
9

次の中からどれを選択するのが好ましいでしょうか?エラーメッセージをC++に含めるにはどのような方法が適していますか?

cout << "I am an error message!" <<endl; 
exit(-1); 
  • 別のヘッダファイルでエラーメッセージを定義します:

    #include "ErrorMessages.h" 
    cout << ERRORMESSAGE_1 <<endl; 
    exit(-1); 
    
  • エラーメッセージが含まれている関数を作成必要な場所

    1. は、コード内のエラーメッセージを含めます。

    また、これらのメッセージの一部として一意のエラーIDを含めるのは一般的ですか?

  • +0

    最初の方法は、非常にローカライズフレンドリーではありません。 – qdii

    +1

    例外処理ですか? – Rapptz

    +5

    ... Aaaaaaand、エラーメッセージは 'cur'ではなく' cerr'に行きます。 –

    答えて

    4

    メリットと落とし穴の両方が優先事項です。

    エラーのサイトのハードコーディング文字列リテラルは、維持するのが難しいかもしれませんが、私の正直な意見では読みやすいです。

    cout << "You were unable to login. " 
        << "Please check you're user name and password and try again" 
        << endl; 
    

    例えば

    は、しかしながらメッセージ(両方23)をハードコーディングしないのプラス側を

    cout << LOGIN_CREDENTIALS_ERROR << endl; 
    

    より意図かなり良く示す:

    //Foo.cpp: 
    cout << DIVIDE_BY_ZERO_ERROR << endl; 
    
    //Bar.cpp 
    cout << DIVIDE_BY_ZERO_ERROR << endl; 
    
    // If you want to change DIVIDE_BY_ZERO_ERROR text you only have to do it once 
    //ErrorMessages.h (Ops grammar needs correcting) 
    const std:string DIVIDE_BY_ZERO_ERROR = "Dont not divide by zero"; 
    

    また、エラーメッセージが変更される可能性がある場合:

    // ErrorMessages.h 
    #ifdef LOCALIZATION_EN 
    const std:string FRIENDLY_ERROR = "Hello, you are doing something wrong"; 
    #elseif LOCALIZATION_FR 
    const std:string FRIENDLY_ERROR = "Bonjour, ..."; 
    ... 
    

    OR

    // ErrorMessages.h 
    #ifdef DEBUG 
    const std:string SOME_ERROR = "More detailed error information for developers" 
    #else 
    const std:string SOME_ERROR = "Human friendly error message" 
    #endif 
    
    1

    アプリケーションのローカリゼーション要件があるかどうかによって異なります。そうした場合は、エラーメッセージを含め、すべての文字列を1か所にまとめてください。このような要件がない場合、私はメッセージをインラインにすることをお勧めします(最初の例)。そのようにして、不平を言っているコードを見つけたいのであれば、メッセージをgrepするだけでよいのです。

    関連する問題