そのときもしエラーであれば、その関数の戻り値として明らかにふさわしくない値(例えば-1や0)が返れば、あなたやその関数を呼ぶ他の人は「あっ、エラーだ」と気付けるでしょう。いう値を選ぶのが良いと思います。「-1と0(あるいは他の値)のどれ良いか」というのは、ケースバイケースなので、その関数の戻り値が意味するものに合わせて選定してください。その値は通常0を取りうるのか否か、ということです。※値の選定については、それこそ標準関数の戻り値が非常に参考になると思いますので、そういった視点で標準関数を眺めてみるのも面白いと思います。その時、戻り値(例えば-1)はそのままよりも、エラー値であるということを明確に定義してあげると、呼び出す人はなお嬉しいでしょう。ret;}といった具合です。defineでなくenumでも同様です。戻り値として戻ってきた-1はエラーなのか正常値なのか、というところに迷ってしまいますからね。この関数が示すエラー値を変えたくなった場合も(例えば-1がその後正常値の含まれるようになってしまった、とか)、このようにしておけばdefineの定義値を変えてやるだけで済みます。char*型に関して言えば、これはNULLを返してやるのほぼ一択かなあと思います。※上記のように明らかに不正な値を定義する場合もあるかとは思いますが。単なる「型」をひとつ取ってみてもいろんな意味を持たせている場合があります。その意味に合わせたエラー値を選定して、関数を「設計」してあげてください。|3一般に戻り値のある関数の戻り値は「値」か「意味」になります。してしまうと戻り値は「整数」に過ぎません。CALL_SATUS型の意味が戻る}の様なコードが考えられます。|3こういう話をすると、いたずらに複雑にするだけで、逆に理解の妨げになるかもしれませんが、実践的なプログラムでは、こういうエラーの出し方をする関数がよくあるということで、説明したいと思います。関数の戻り値とべつに、ポインタの引数を使って、エラーメッセージを出します。適宜値を変えてください。適宜値を変えてください。0;}逆パターンとして、返り値をエラーメッセージとし、ポインタの引数で結果を渡す関数も、ありますね。|3ライブラリでは、引数に法則性はないと言われていますが、返り値にはある程度の法則があります。cで用意されているライブラリに合わせることをおすすめします。処理が関数内で完結している場合(成功か失敗の二択)、成功した時に0を返し、失敗した場合それ以外やエラー番号などの数値を返します。例:socket(NULL,NULL,NULL);では返り値は-1,エラー番号97となる。処理が関数内で完結していない(関数に対して要求をする)場合、失敗した時に0やNULLを返します。例:fopen("","r");エラー番号2for(;malloc(long);)エラー番号12エラー番号はerrnoの値です。通常は0エラーが発生した場合、エラーを示す値が代入されます。負の無限大から正の無限大まで、任意の戻り値がありうるということで「戻り値でエラーを表現する」ことがそもそもできません。返却する仕様となっています。あなたの作る関数でも同じような状況になる可能性があります。1つのプロジェクトの中での自分の担当範囲では設計を一貫させておくべしです。|20も-1も妥当なintなので基本的にintを戻す関数で「-1だったらエラー」の考え方はいけません。すれば良いでしょう?まずは、エラーな状態になれない関数を作った方が良いです。難しいならば下記の事を考えましょう。リターン値をboolにして、intをポインターで戻す。リターン値のタイプをintではなく、複合型にしても良いです。return_value;}2の方が読みやすいしジェネリックですし、ポインターに関する問題もないようので2の方が何となくおすすめですね。コードはboolを使っているのでプレーンCのコンパイラーでビルドをするならboolをcharにマップしてください。|1既に出ているように「どう設計したかによる」というのが答えになりますが。