2016-03-22 12 views
-3

ポストError handling in C codeは、Cライブラリのエラー処理について説明していますが、自分のアプリケーション内でエラーを処理する方法が不思議です。Cエラー処理アプリケーションを使用して

私は最初のCアプリケーションを書こうとしています。私は2つのエラー処理スタイル、すなわちエラーコードの返却とエラーメッセージの返送を検討しています。

// error code style 
#define INTERNAL_ERROR 3 
int foo(void) 
{ 
    int rc = third_party_lib_func(); 
    if (rc) { 
     return INTERNAL_ERROR; 
     // pro: looks nice and clean, everyone talks about error code 
     // con: it is hard to debug, what error comes from the third 
     // party function? 
    } 
    return 0; 
} 

// error message style 
char *foo(void) 
{ 
    int rc = third_party_lib_func(); 
    if (rc) { 
     char *errstr = third_party_lib_strerror(rc); 
     return errstr; 
     // pro: golang style, easy to check by foo() == NULL, 
     //  easy to debug 
     // con: maybe it is an rare error handling approach? 
    } 
    return NULL; 
} 

あなたの意見は?そして、実際のアプリケーションで最も一般的な方法は何ですか?ありがとう。

+2

ようになり、 "あなたの意見は何ですか?" - 悪いジュジュ。そのような質問は話題にはなりません。 – Olaf

+0

IMO、コードが優れています。メッセージを直接返すことは、国際化のメンテナンスや問題の難しさを意味します。 –

+0

@Olaf stackoverflowのすべての答えは、誰かの意見に基づいています、なぜ悪いですか? – nut

答えて

1

通常はエラーコードが優先されます。 C言語での適切なエラー処理に興味があるなら、CERT secure coding recommendations and rulesを読むことをお勧めします。

さらに、エラーコードを返すために、私はロギングを使用する傾向があります。例えば、以下のマクロ。

/* defining some error logging macros */ 
#define LOG_ERROR(...)   \ 
    do {       \ 
    errx(1, __VA_ARGS__);   \ 
    } while(0) 

#define LOG_WARNING(...)   \ 
    do {       \ 
    warnx(__VA_ARGS__);   \ 
    } while(0) 

戻りケースが

if (!something) { 
    LOG_WARNING("Something bad happend"); 
    return (-1); 
} 
+0

リンクをありがとう、インターネット上のCエラー処理に関する記事を見つけることは非常に困難です。 – nut

+1

@あなたは大歓迎です:) btw:別の素敵なサイトはhttp://c-faq.com/ – mkind

+0

ありがとう、すばらしいリンク – nut

関連する問題