プログラムが常にa.outにコンパイルされるのはなぜですか?なぜp.outやc.out、g.progはないのですか?

プログラムが常にa.outにコンパイルされるのはなぜですか?なぜp.outやc.out、g.progはないのですか?

cc歴史的に私は、コマンドを実行するときにmakeファイルがない場合、またはコンパイラが特定のフラグを使用しない限り、通常は私の出力がgcc常にコンパイルされることを知っています。a.outしかし、なぜa.out?何百万もの可能性があるのはなぜc.outですか?c.run

答え1

それは歴史的な遺物、すなわちヘリテージヴィンテージです。歴史上のa.out代表「アセンブラ出力」

a.out今はファイル名だけですが、以前は実行可能ファイルのファイル形式でもありました。

現在、実行可能ファイルa.out形式はほとんどサポートされていません。これELF形式用途はより広いですが、Cコンパイラがデフォルトで出力する古い名前を保持します。

答え2

@A.Meauの答えを拡張すると...歴史的な遺物になることに加えてデフォルト名はa.outPOSIXで指定します。:

リンクの編集を防ぐオプションがない場合(例:-氏または- 金利)、すべての入力ファイルはエラーなしでコンパイルおよびリンクされます。生成された実行可能ファイルは、以下に基づいている必要があります。- モールド 結果ファイルオプション(存在する場合)またはファイル行く。出力

これは、実行ファイルで使用される実際のバイナリ形式に関係なく適用されます。a.out元の特定の形式に関連付けられているしかし、最新のLinuxシステムは通常、以下を使用します。非常に低い周波数

関連情報