これは、「相互運用性と移植性」の限界(神話)を反映した終わりのない話です。
プログラムが「成功」を示すために戻す必要があるのは、言語仕様ではなく、誰が値(オペレーティングシステム、またはプログラムを呼び出したプロセス)を受け取っているかによって定義される必要があります。
しかし、プログラマーは「移植可能な方法」でコードを書くことを好み、それゆえに、返されるシンボリック値を定義する「オペレーティングシステム」の概念のための独自のモデルを発明します。
さて、多対多のシナリオ(多くの言語が多くのシステムにプログラムを作成するのに役立つ)では、「成功」の言語規則とオペレーティングシステムの言語規則(常に同じであることを認めることはできない)の間の対応は、特定のターゲットプラットフォーム用のライブラリの特定の実装によって処理されます。
しかし-残念ながら-これらの概念は、C言語が展開された時点では明確ではなかった(主にUNIXカーネルを書くため)、「リターン0は成功を意味する」と書かれて書かれた書籍のギガグラム。その時はCコンパイラを持っています。
それ以来、そのような通信をどのように処理するかについて明確な標準化は行われていませんでした。CとC ++には独自の「戻り値」の定義がありますが、適切なOS変換を許可するものは誰もいません(またはそれ以上:コンパイラーのドキュメントではそれについて何も述べていません)。0は、UNIXの場合は成功、Linuxの場合は-独立した理由で-Windowsの場合も成功を意味します。これは、既存の「コンシューマーコンピューター」の90%をカバーし、ほとんどの場合、戻り値を無視します(したがって、何十年もの間議論してください、誰も気付かないでしょう!)
このシナリオの中で、決定を下す前に、次の質問をします。-自分の存在について発信者に何かを伝えたいですか?(常に0を返すだけの場合...すべての背後に手掛かりはありません)-私の発信者はこの通信について慣例を持っていますか?(単一の値は慣習ではないことに注意してください:情報表現は許可されていません)
この回答の両方が「いいえ」の場合、おそらく良い解決策は、メインのreturnステートメントをまったく記述しないことです。(そして、ターゲットに関しては、コンパイラに決定させましょう)。
規則がない場合は、0 =成功するとほとんどの状況が満たされます(規則を導入している場合、シンボルの使用は問題となる可能性があります)。
規則が整っている場合は、それらと一貫性のある記号定数を使用してください(プラットフォーム間の値の一貫性ではなく、規則の一貫性を確認してください)。