main()なしでCプログラムを作成できますか?

1486 ワード

はい、main()のないCプログラムを書くことができます.
これは好評の「Hello World」プログラムで、main()はありません.
 
  • #include
  • extern void _exit (register int );
  • int _start (){
  • printf (“Hello World\n ”);
  • _exit (0 );
  • }

  • ほとんどの本はmain()がプログラム実行の切り込み点であることを教えてくれます.これは完全に正確ではない.抽象的な面から言えば、プログラマーの観点からもそうです.しかしシステムの観点から見るとstart()は、最初に呼び出された関数です._start()プログラムが実行する環境を設定しmain()を呼び出します.
    これは上記プログラムの出力です.
    編集1:extern voidを書いた理由についていくつかあります.exit(register int)の情報;
    _start()と_exit()は、プログラムの実行前に自動的に呼び出されて環境を設定し、他のマシンレベルの作業を実行する関数です._exit()は事前定義されているので、外部ストレージクラス(extern)を使用してコンパイラに宣言されていることを伝えます.もしexternキーワードを逃したら、C言語で無効な関数を再ロードしようとします.
    _exit()はマシンレベルで動作するため、レジスタ格納クラスを持つデータ型の入力が必要であるため、registerキーワードが使用される.extern voidを書かないとexit(register int)、コンパイラは警告しますが、プログラムは正常に動作しています:)
    編集2:今日このメッセージを受け取りました.
    どうして最初に呼び出すことを知ってるの?startはmain()を呼び出しますか?
    この質問の唯一の目的は、プログラミングに関する詳細をどこから入手できるかということです.
    すべての本では、文法とすべての言語構造を簡単に見つけることができますが、これらのものにはいくつかの詳細が欠けています.
    これらの詳細をどこから知るかを教えてくれませんか?
    実はこれはとても良い問題で、これは私が私の答えを更新する理由ですが、答えは簡単で、あなたが想像していたより簡単です.すべては私たちの前にあります.私たちは通常無視している小さな細部にもっと注目する必要があります.
    そのため、私がどのように理解しているかを知るためにstart、例を使用して説明します.これは私が書いた簡単なプログラムで、main()はありません.
    次に、プログラムをコンパイルして実行し、何が起こるかを見てみましょう.
    関数ではstart:mainに対する未定義の参照.これは_start()にはmain()への参照はありません.
    それは私が理解し始めたことです.startの時.それからグーグルの少しだけで、この関数が何なのかを発見しました.main()の前に最初に呼び出された関数です.エラーや警告を無視し、実際に何を意味するかを探さなければなりませんあなたに勉強を教えてくれる唯一の先生はあなた自身です.