日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

可以在没有main()的情况下编写C程序吗?

發(fā)布時間:2024/4/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可以在没有main()的情况下编写C程序吗? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

是的,你可以編寫一個沒有main()C程序?

這是一個廣受好評的“Hello World”程序,沒有main()。

  • #include <stdio.h>
  • extern void _exit register int );
  • int _start (){
  • printf (“ Hello World \ n ”);
  • _exit 0 );
  • }
  • 幾乎每本書都教我們main()是程序執(zhí)行的切入點(diǎn)。這不完全正確。從抽象層面來說,從程序員的角度來看也是如此。但是從系統(tǒng)的角度來看,_start()是第一個被調(diào)用的函數(shù)。_start()設(shè)置程序執(zhí)行的環(huán)境,然后調(diào)用main()。

    這是上述程序的輸出。

    編輯1:這里有一些關(guān)于為什么我寫了extern void _exit(register int)的信息;

    _start()和_exit()是“系統(tǒng)”在程序執(zhí)行之前自動調(diào)用以設(shè)置環(huán)境并執(zhí)行其他一些機(jī)器級工作的函數(shù)。_exit()是預(yù)定義的,因此我們使用外部存儲類(即extern)告訴編譯器它已經(jīng)在某處聲明了。如果我們錯過了extern關(guān)鍵字,我們試圖重載在C語言中無效的函數(shù)。

    _exit()在機(jī)器級工作,因此它需要具有寄存器存儲類的數(shù)據(jù)類型的輸入,因此使用了register關(guān)鍵字。如果你不編寫extern void _exit(register int),編譯器會給你一個警告,但程序運(yùn)行正常:)

    編輯2:我今天收到了這條消息:

    你怎么知道首先調(diào)用_start然后調(diào)用main()?

    我問這個問題的唯一目的是從哪里可以獲得有關(guān)編程的這些細(xì)節(jié)?

    在每本書中,我們都可以輕松找到語法和所有語言結(jié)構(gòu),但這些東西缺少某些細(xì)節(jié)。

    能幫助我/指導(dǎo)我從哪里了解這些細(xì)節(jié)嗎?

    實際上這是一個非常好的問題,這就是為什么我要更新我的答案,但答案很簡單,比你想象的要簡單。一切都在我們面前,我們只需要更多地關(guān)注我們通常忽略的微小細(xì)節(jié)。

    因此,為了讓您知道我如何了解_start,我將使用一個示例向您展示。這是一個我編寫的簡單程序,它沒有main()。

    現(xiàn)在讓我們編譯并運(yùn)行該程序,看看會發(fā)生什么。

    它說在函數(shù)_start中:對main的未定義引用。這意味著_start()中沒有對main()的引用。

    那是我開始了解_start的時候。然后只是谷歌的一點(diǎn)幫助我發(fā)現(xiàn)了這個函數(shù)到底是什么,它是在main()之前首先調(diào)用的函數(shù)。所以你看,我們必須停止忽略錯誤或警告,并應(yīng)該尋找它們實際意味著什么。唯一能教你學(xué)習(xí)并讓你學(xué)習(xí)的老師就是你自己:)

    總結(jié)

    以上是生活随笔為你收集整理的可以在没有main()的情况下编写C程序吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。