2012-03-03 14 views
35

可能性の重複:
Error handling in C code
What return value should you use for a failed function call in C?正常に機能するために0または1を返す必要がありますか?

私はしばらくの間、など、常に0を使用しますが、もしでその本当に読めない

私は1を返すべきでしょうか?主な関数が成功のために0を返すのはなぜですか?

+1

リンクされた質問が閉じられました。 – bernie

+0

@AdamBernier:重複しています。非常に関連性の高い回答がありました。 –

+0

@Oli:他の質問が重複しているとは思われません(おそらく私はそれを見ていないだけです)。それにもかかわらず、私はそれとこの1つを閉じることに同意します:質問はこの特定のウェブサイトのためにあまりにも自由に終わっているように見えます。 – bernie

答えて

33

成功のためには、C標準で定義されています(クレジットはhvdになります)。移植性を高めるために

But

、あなたはそれぞれ、成功と失敗の 従来のステータス値のためのマクロEXIT_SUCCESSとEXIT_FAILURE を使用することができます。これらはstdlib.hファイルで宣言されています。あなたの関数については

(私は価値について話しているメイン終了または類似の呼び出しからOSに返却)

、あなたが望むものを返すと、コードが読みやすくなり、などあなたのプログラムに沿ってそれを保つ限り長く。

+0

0は常に成功を意味しますが、他の終了コードもシステムによって成功を意味することができます。 – hvd

+0

@hvdそれは当てはまりません。 'EXIT_SUCCESS'と' EXIT_FAILURE'の値は、C標準では定義されていません。 –

+2

@AndrewMarshall 'EXIT_SUCCESS'は0以外の値を持つかもしれませんが、' return 0; '*も成功を意味します。 – hvd

-4

ブール値のステータスを返す場合は、intをtypedefして使用できます。これにより、関数の戻り値の型が明白になり、が0の場合は、の値が0か1かどうかをチェックする必要はありません。

typedef int BOOL; 
#ifndef TRUE 
#define TRUE 1 
#endif 

#ifndef FALSE 
#define FALSE 0 
#endif 

BOOL myfunc() 
{ 
    ... 
    return TRUE; 
} 
+9

標準の 'bool'型をなぜ作り直しますか? – hvd

+0

@hvd将来C++とのコードをコンパイルした場合にエラーが発生するのは間違いでしょう。コースの他の名前、例えば 'bool_t'などを選ぶことができます。 – trojanfoe

+2

CとC++の両方で、 '#include 'を使用し、手動でtypedefとして定義することなく 'bool'型を使用できます。C++では ''は必要ありませんが、必要に応じて許可され、無害で、簡単に '#ifdef __cplusplus'でラップされます。 – hvd

10

mainが成功するために0を使用する理由は、オペレーティングシステムへのアプリケーションの終了コードとして使用されるためです.0は通常成功を意味し、1(以上)は失敗を意味します。 (もちろん、あらかじめ定義されているマクロEXIT_SUCCESSEXIT_FAILUREを使用してください)。

しかし、アプリケーションでは、失敗の場合はゼロを使用し、成功の場合はゼロ以外の値を使用する方が自然です。戻り値は直接使用できますifの場合:

if (my_func()) 
{ 
    ... 
} 
関連する問題