コマンドライン引数がどのように詳細に機能するかを理解しようとしています。コマンドライン引数は "2回渡される"でしょうか?
これは私が起こる考えるものです:
あなたがCでmain()
機能が含まれているソースコードをコンパイルすると、生成されたオブジェクトファイルは、CRTにリンクされます
、およびプログラムのエントリポイント
_start()
関数(CRTに存在する)になり、_start()
はmain()
を呼び出します。はあなたには、いくつかのコマンドライン引数を、あなたのプログラムを実行し、それを通過したときに今、コマンドライン引数は
_start()
関数に渡されます、その後、_start()
main()
にコマンドライン引数を再通過します。
正しいですか?
"になる部分に分割する必要があります" ...プログラムのエントリポイントは "main"関数になります。それ以外のものはあなたのCプログラムとは無関係です。もっと深くしたいのであれば、これはCに関連するのではなく、あなたのプラットフォームだけに関係します。 Linuxを使って、crtとローダーのソースコードを読んで、シンプルなプログラムをシングルステップ実行します。これをすべてここで説明するには、はるかに広すぎます。 – Olaf
引数の配列を表すポインタと引数countが渡されます。引数自体はランタイムによって処理されています。 – jxh
コマンドラインを解釈するシェルは、パラメータを解析し、引数の配列に値を設定します。その後、countとポインタをコンパイラ固有のメソッド(メインに呼び出す前にスタックに置くか、レジスタにこれらの値を設定する可能性が高い)を介してmainに渡します。 – blackghost