色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

main函數的末尾沒有return語句會有什么影響

Wildesbeast ? 來源:今日頭條 ? 作者:linux內核 ? 2020-02-20 15:32 ? 次閱讀

c語言中,如果main函數的末尾沒有return語句將會有什么影響?":

問題的本質

回答這個問題其實只要理解一個東西就行了:

那就是帶有返回值的函數請務必提供返回值,這個是基本約定也是編程習慣,如果大家都遵守,你不遵守,各種奇葩和頭疼的后果就遲早會來,不管是 main 也好,其他函數也好。

所以,準大一這個時候一定要從現在開始養成習慣,遵守語言的基本約定。

main 的標準聲明

main 的標準聲明是什么?

int main(int argc, char *argv[])

很多同學寫例子,也有這么寫的?

void main(void) { }

實際上,完整的 main 聲明還有第三個參數 env,這里不做展開。

C 語言各標準差異以及靜態檢測方法

這種可以用 -Wall 檢查出來:

$ echo 'void main(void) {}' | gcc -Wall -x c - - :1:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]

如果用 int 默認檢查不出來 return value ,默認是兼容 c11 的 gnu11:

$ echo 'int main(void) {}' | gcc -Wall -x c - - $ echo 'int main(void) {}' | gcc -Wall -std=gnu11 -x c - -

試了下,c99 之后都是沒有提示問題。但是 c90 以及之前都提示需要加返回值:

$ echo 'int main(void) {}' | gcc -Wall -std=c90 -x c - - : In function ‘main’: :1:1: warning: control reaches end of non-void function [-Wreturn-type]

考慮到兼容性,建議務必養成寫法上的習慣。由于 main 稍微特殊些,c99 默認處理了,但是對于其他函數還是要自己加,不做處理的話,是有很大風險的。

對于 c99 以及之后的版本,對普通函數還是會做檢查。如果有的寫,有的不寫,不一致的話久而久之習慣就很難養成了。

$ echo 'int test(void) {}; int main(void) { test(); }' | gcc -Wall -std=c99 -x c - - : In function ‘test’: :1:1: warning: control reaches end of non-void function [-Wreturn-type]

由于人總會出錯,所以,在編譯的 cflags 里頭,建議強制加上 -Wall -Werror,在遇到這類錯誤是強制退出,而不僅僅是警告。當然,對于已經存在的項目,prove-in-use 的情況下,建議保留之前的默認配置選項,除非要確實投入很多精力去重構。

$ echo 'int main(void) {}' | gcc -Wall -Werror -std=c90 -x c - - : In function ‘main’: :1:1: error: control reaches end of non-void function [-Werror=return-type] cc1: all warnings being treated as errors

關于返回值的含義

需要注意的是,默認情況下,沒有錯誤,就是 return 0,而不是 return 1。

完整的模板:

int main(int argc, char *argv[]) { return 0; }

上面多次提到了后果和風險,為什么?因為檢查函數和程序返回值是一個最最基礎的操作。如果不按常理返回正確的返回值,后果是,后續對該值的檢查所做出的所有動作都可能不可預知。

這個值是怎么體現的呢?

$ echo -e 'int main(void){ return 0; }' | gcc -Wall -Werror -std=c99 -O0 -x c - - $ ./a.out $ echo $? 0 $ echo -e 'int main(void){ return 100; }' | gcc -Wall -Werror -std=c99 -O0 -x c - - $ ./a.out $ echo $? 100

比如說,在 Shell 編程中通常會在程序執行完,立即檢查返回值,然后決定接下去做什么操作?

if [ $? -eq 0 ]; then echo 'Success'; else echo 'Failure'; fi

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136692
  • 函數
    +關注

    關注

    3

    文章

    4327

    瀏覽量

    62573
收藏 人收藏

    評論

    相關推薦

    MQX操作系統啟動到main函數的過程

      當一個嵌入式操作系統上電的時候,是如何從硬件跳轉到軟件的main函數里面的呢?許多學習嵌入式軟件的人一開始都會有這樣的疑惑,今天這里將詳細介紹MQX系統啟動到main
    發表于 11-08 15:48 ?1020次閱讀
    MQX操作系統啟動到<b class='flag-5'>main</b><b class='flag-5'>函數</b>的過程

    void main()還是int main()?

    操作系統)。 如果 main 函數的最后沒有return 語句的話,C99 規定編譯器要自動在生成的目標文件中(如 exe 文件)加入
    發表于 12-17 20:21

    main函數返回值的認知

    *argv[] ) 。main 函數的返回值類型必須是 int ,這樣返回值才能傳遞給操作系統。 如果 main 函數的最后沒有
    發表于 10-24 11:08

    C語言,函數return的作用

    在一個函數中,不管return處于什么位置,只要執行了return 就跳出函數,是這樣嗎?比如在for,wile或if循環語句中,即使不滿足
    發表于 05-09 09:48

    為什么OSStart()函數之后的函數不能被執行但后面會加別的語句

    在原子的代碼OSStart()之后添加測試代碼,測試發現沒有執行,但是看有些人會在OSStart()之后寫上while(1);或是return(0);的語句,不知道何解?
    發表于 09-05 04:35

    淺談C語言return語句的用法

    函數沒有類型(類型為void),那么它就沒有返回值,也就是說子函數沒有return
    發表于 05-11 09:45

    淺談C語言return語句main 函數的返回值

    函數中,如果碰到return 語句,那么程序就會返回調用該函數的下一條語句執行,也就是說跳出函數
    發表于 05-10 10:53 ?5301次閱讀

    科普:Python函數默認返回 None 的原因

    Python 有一項默認的做法,很多編程語言都沒有——它的所有函數會有一個返回值,不管你有沒有return
    的頭像 發表于 08-17 11:39 ?2365次閱讀

    C語言的main函數有幾種寫法?

    從學習C語言開始就一直寫個一個函數,那么你知道它的標準寫法什么什么樣嗎? main函數,又稱主函數,是程序執行的起點,我們平時寫的main
    的頭像 發表于 10-15 11:04 ?3305次閱讀

    深度剖析C語言的main函數

    main的返回值 main函數的返回值用于說明程序的退出狀態。如果返回0,則代表程序正常退出。返回其它數字的含義則由系統決定。通常,返回非零代表程序異常退出。 void main()
    的頭像 發表于 12-18 17:07 ?4388次閱讀

    return-函數的返回值是什么

    return關鍵字后接變量名或表達式可以將函數的計算結果返回到調用處。變量或表達式等同于接收果汁、豆漿的杯子。如果函數沒有返回值,return
    的頭像 發表于 02-23 10:52 ?1210次閱讀
    <b class='flag-5'>return</b>-<b class='flag-5'>函數</b>的返回值是什么

    C語言編程中main函數退出后程序去哪兒了?

    PIC 單片機語言程序進行跟蹤,發現main() 函數最后一條語句為 reset,也就是單片機直接復位,這是 MAPLAB編譯器根據 PIC 單片機特點增加的復位語句
    發表于 05-31 15:28 ?419次閱讀
    C語言編程中<b class='flag-5'>main</b><b class='flag-5'>函數</b>退出后程序去哪兒了?

    為什么Python沒有main函數

    今天的文章中,我們來討論一下為什么有的編程語言有main函數,而Python為什么沒有main函數
    發表于 08-17 11:47 ?322次閱讀

    python函數返回多個參數

    。 在Python中,可以使用關鍵字 return 來返回一個或多個值。在函數定義的末尾,可以使用 return 語句來指定
    的頭像 發表于 11-21 16:37 ?1261次閱讀

    if嵌套函數的正確輸入方法為

    = nested_function() # 使用嵌套函數的結果進行后續操作 else : # else語句的邏輯 return result 在上面的示例中,我們首先定義了一個名為 main
    的頭像 發表于 11-30 16:50 ?1393次閱讀
    主站蜘蛛池模板: 国产成人免费视频| 国产 浪潮AV性色四虎| 国产人妻人伦精品836700| 免费人成网站永久| 亚洲无线观看国产| 免费国产足恋网站| 亚洲AV无码一区二区三区牛牛 | 欧美性狂猛AAAAAA| 色狼亚洲色图| 99riav9 精品香蕉免费大视频| 国内精品久久久久影院网站| 日本高清免费在线观看| 97人视频国产在线观看| 九色PORNY蝌蚪视频首页| 午夜噜噜噜私人影院在线播放| 澳大利亚剧满足在线观看| 国产不卡一卡2卡三卡4卡网站| 暖暖 免费 高清 日本视频大全 | 91天仙tv嫩模福利| 精品香蕉99久久久久网站| 污漫日本E同人| 俄罗斯人与动ZOOZ| 久久国产乱子伦精品免费M| 欧美无码专区| 92午夜理论第1000集 app| 久久精品国产亚洲AV妓女不卡| 亚洲精品国产精麻豆久久99| 国产精品久久久久秋霞影视| 色偷拍自怕亚洲在线| yellow在线观看免费高清的日本 | 国产精品第九页| 入禽太深视频免费视频| 白洁在线观看| 秋霞影院福利电影| swag合集120部| 欧美乱妇狂野欧美在线视频| 99C视频色欲在线| 免费三级网址| 99视频精品全部 国产| 免费又黄又硬又爽大片| 97se se|