0

gcc (GCC) 4.7.2 c89

呼び出された関数からエラー メッセージを返すときのベスト プラクティスは何ですか?

私が作成している共有ライブラリの1つに、次の機能があります。

/* Create directory structure */
apr_status_t dir_create(apr_pool_t *mem_pool)
{
#define SRC "test_src"

    apr_fileperms_t file_perms =
        APR_FPROT_UWRITE   |
        APR_FPROT_GWRITE   |
        APR_FPROT_WWRITE   |
        APR_FPROT_UREAD    |
        APR_FPROT_GREAD    |
        APR_FPROT_WREAD    |
        APR_FPROT_UEXECUTE |
        APR_FPROT_GEXECUTE;

    if(apr_dir_make(SRC, file_perms, mem_pool) != APR_SUCCESS) {
        LOG_CRIT("Failed to create directory");
        return FALSE;
    }

    return TRUE;
}

LOG_CRITerrno に関連する適切なエラー メッセージが表示されます。

この関数を呼び出す私のアプリケーションには、次のものがあります。

if(dir_create(mem_pool) != TRUE) {
    return 1;
}
LOG_INFO("Directory has been created");

たとえば、上記が失敗した場合、次のようにログに記録されます。

[CRITICAL] dir_create:28: error [File exists] Failed to create directory

ライブラリ関数を呼び出すアプリケーションにエラー メッセージを配置する必要があるかどうか疑問に思っています。それとも、エラー メッセージが表示されたらすぐに表示する必要がありますか?

上記の場合、呼び出された関数にエラー メッセージを表示します。そして、関数が戻ってきたら、1 を返してアプリケーションを終了するか、何か他のことをします。

別の考えとして、エラー インジケーターを返し、呼び出し元の関数にエラーの原因を表示させる方がよいでしょうか?

4

2 に答える 2

1

ここで行っているように、可能な限り低いレベルでエラー メッセージをログに記録することをお勧めします。にアクセスする必要がerrnoある場合、これは特に重要です。それ以外の場合は、より高いレベルの関数に到達するまでに変更されている可能性があります。このレベルでは、エラー メッセージをできるだけ技術的かつ具体的にします。

ライブラリ関数の戻り値に基づいて、アプリケーション コードが何らかのアクションを実行する場合があります (たとえば、人間が判読できるエラーの説明を提供するポップアップ ウィンドウを表示したり、に書き込むことができますstderr)。これは通常、可能な限り最高のレベル (必要に応じて UI レベル) で行われます。

于 2013-04-23T07:50:12.883 に答える