Cでint main()メソッドがあり、戻り値がある場合、この値はreturn文が実行された後にスタックに保存されますか、または返された後にスタックに何も表示されませんか?mainメソッドの戻り値はスタックに保存されていますか?
答えて
C言語では、スタック、呼び出し規約、または実装がmain
が返ってきたときの処理の要件をどのように満たすかについては何も定義されていません。多くの実装では、main
を呼び出すエントリポイントコードは、exit(main(argc, argv));
のような何らかの処理を行います。この場合、呼び出し規約によってスタックの最初の引数(ここではexit
)がスタックに置かれると、戻り値はmain
になります。しかし、それが実装によって広範に変化するかどうか。
これは完全にの実装に依存します - OSはmain
の前後で何が起こるかを処理します。
メインコールの周りに戻り値を受け取り、それをローカル変数に格納するフレームワークがある可能性があります。しかしどちらの方法でも、あなたのプログラムは終わり、終わったので、あなたはそれにアクセスすることができません。
私が知っているシステムでは、main
は他の関数と同様に扱われます(また、mainへの再帰呼び出しが可能でなければならない)ので、戻り値はABIが渡すために指定した方法で渡されます。通常、それはスタックではなく、関数のスタックフレームが関数が復帰したときに破棄されるので、やや面倒です。 x86システムでは、通常、戻り値はEAX/RAXレジスタに設定されます。
'であり、mainへの再帰呼び出しでmain()への再帰呼び出しが許可されなければならないという標準/ – ThingyWotsit
@ ThingyWotsit、C++はそれを禁じます。 Cではなく、 "最初の関数からmain関数への復帰はexit関数の呼び出しと同じです" [\ [1 \]](http://stackoverflow.com/a/3728153/6372809)[ \ [2 \]](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf)であり、これは禁止されていないことを意味します。 [SOの違いに無作為に言及](http://stackoverflow.com/questions/38560971/how-to-call-main-from-other-functions-in-c) – ilkkachu
OK、情報ありがとう:) – ThingyWotsit
- 1. int main()の戻り値はどこに格納されていますか?
- 2. リストビューのテキストボックスの値は、DBに保存されていなくても元の値に戻りません。
- 3. スタックはスタックポインタの上にのみ保存されていますか?
- 4. マングースモデル#保存戻り値
- 5. main()に変更を戻さないメソッドのクラスのプライベート値を変更する
- 6. クロージャー、値はどこに保存されていますか?
- 7. ラジオボタンの値がデータベースに保存されていますか?
- 8. 戻り値がネストされていない戻り値
- 9. LLVM main()の無効な戻り値タイプ
- 10. メソッドの戻り値内のファイルから得られた値を保持する
- 11. データベースに値を保存するPOSTメソッドが実行されていません
- 12. main関数 - 戻り値のポイントは何ですか?
- 13. DRFシリアライザデータベースに保存された値と異なるフィールド戻り値
- 14. メソッドからの戻り値
- 15. cdの戻り値を保存するには?
- 16. 保持されているモードデータはGPUに保存されていますか?
- 17. 戻り値()メソッド
- 18. 保存メソッドがオブジェクトの保存時にトリガーされない
- 19. メソッドの戻り値は型の安全性を保証しますか?
- 20. 保存すると元に戻す/やり直しスタックをクリアする必要がありますか?
- 21. メソッドがスタック内でどのように形成され、メソッドの戻り値がメソッド内で2回繰り返される場合
- 22. JQueryで$ .getJSON戻り値を保存するには
- 23. 前の関数ではなく、int main()に戻りますか?
- 24. JAVA変数の値はいつスタックにプッシュされますか?
- 25. Bツリーキーの値はどこに保存されていますか?
- 26. Apache Commons Math:SummaryStatisticsの値はどこに保存されていますか?
- 27. セマフォーで保護されたInterationでスタックされています
- 28. 保存された写真の配列は常に空に戻されます
- 29. 期待値の戻り値を保存する
- 30. サービスファブリック:ImmutableListがIReliableDictionaryに保存され、アプリケーションのアップグレード時に空に戻ります。
アーキテクチャおよび呼び出し規約と戻り値のタイプによって異なります。通常、x86_64では、整数戻り値はスタック上ではなくレジスタraxに格納されます。たとえば、浮動小数点値または構造体を返すと、それは異なります。 –
Cは_methods_をサポートしていません。それはスタックを使用することも言及していません! – Olaf