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

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

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

3天內不再提示

那些在C語言中存在但是不建議使用的關鍵詞!

電子工程師 ? 來源:嵌入式悅翔園 ? 作者:嵌入式悅翔園 ? 2022-08-08 10:37 ? 次閱讀

一、前言

我們在學校學習或者有參加過C語言培訓的話應該都通過不建議使用goto語句,但是一般都不會有人告訴你為什么不建議使用goto語句,類似于這種存在但不建議使用的關鍵詞還有很多,今天我們就一起來看看那些在C語言中存在但是不建議使用的那些關鍵詞!

二、慎用goto關鍵詞

關于goto語句的爭議已經不是一天兩天了,大部分C語言老師在講到goto這關鍵字的時候一般都會叫大家慎用goto關鍵字。既然goto語句C語言標準中定義了,那為什么不建議使用呢?

因為goto語句不僅讓代碼的可讀性很差,隨意的跳出還會給程序帶來安全隱患。但正是這種幾乎被各大公司明令禁止使用的語句,在Linux內核中卻被大量使用著。這只能說明一點,那就是因為我們水平太菜了,公司怕因為你的一句goto造成代碼莫名跑飛!

早期的程序員用goto來解決代碼無法預料的后果,遇到什么問題就用一句goto,讓程序跳轉到某個指定語句。

但是如果你的水平不夠,不能完全理解整個代碼的執行過程的話,貿然使用goto就可以出現莫名的問題,并且程序還很難被查到!

不建議使用goto語句的原因還有以下幾點原因:

goto語句可以被結構化程序的別的語句代替;

goto語句會導致程序可讀性下降,因為在實際程序中,goto可以跳到任何地方,可以往前可以往后,看程序慢慢看,看到goto然后又要去找標識符到底跳到了哪里,可讀性嚴重下降,讓讀程序的人很不舒服;

調試不舒服,調試程序時,由于有goto亂跳的,這就很難調試,去掉嘛,要重新寫代碼,不去掉,無從下手;

存在即合理,goto語句也不例外,goto它存在,確實在某些程序中使用可能有好處,但在我們學習的階段,應該盡量不要碰這類程序,養成一個好的編程習慣。記住一句話:**別人寫的goto我能看懂,但是我自己不會去寫goto!**

三、慎用extern關鍵詞

在C語言程序中,我們用extern關鍵字對某個變量作 “外部變量申明” ,表示該變量是一個已經定義的外部變量,編譯器就會自動地在所有源文件里面查找該變量的定義。

但是在公司編程規范中有明確要求:不允許在C文件中使用 “extern” 來申明外部函數或全局變量

具體原因如下(其中一點原因):

這樣使用extern來定義全局變量確實能給我們帶來了很大的便利,從而節省了我們很多的時間和精力。但是這樣做也會存在一些危險,比如我們在c3.c文件引用的在a1.c文件的funca函數原型由UINT funca(UINT uiValue)變為UINT funca (UINT uiValue1, UINT uiValue2)我們在編譯的時候不會報錯,但是在我們執行程序的時候會在使用該函數的時候存在危險,尤其是該函數若有一個參數為指針,極有可能會存在對指針的誤操作,而引起異常。

嵌入式特別是單片機的程序,最易犯的錯誤是全局變量滿天飛。此現象在早期匯編轉型過來的程序員以及初學者中常見,這幫家伙幾乎把全局變量當作函數形參來用。

每當看到這種程序,我總要戚眉變臉而后拍桌怒喝。沒錯,就是怒喝,我不否認全局變量的重要性,但我認為要十分謹慎地使用它,濫用全局變量會引申帶來其它更為嚴重的結構性系統問題。

濫用全局變量會造成不必要的常量頻繁使用,特別當這個常量沒有用宏定義“正名”時,代碼閱讀起來將萬分吃力。

會導致軟件分層的不合理,全局變量相當于一條快捷通道,它容易使程序員模糊了“設備層”和“應用層”之間的邊界。寫出來的底層程序容易自作多情地關注起上層的應用。這在軟件系統的構建初期的確效率很高,功能調試進度一日千里,但到了后期往往bug一堆,處處“補丁”,雷區遍布。說是度日如年舉步維艱也不為過。

由于軟件的分層不合理,到了后期維護,哪怕僅是增加修改刪除小功能,往往要從上到下掘地三尺地修改,涉及大多數模塊,而原有的代碼注釋卻忘了更新修改,這個時候,交給后來維護者的系統會越來越像一個“泥潭”,注釋的唯一作用只是使泥潭上方再加一些烏煙瘴氣。

全局變量大量使用,少不了有些變量流連忘返于中斷與主回圈程序之間。這個時候如果處理不當,系統的bug就是隨機出現的,無規律的,這時候初步顯示出病入膏肓的特征來了,沒有大牛來力挽狂瀾,注定慢性死亡。

無需多言,您已經成功得到一個畸形的系統,它處于一個神秘的穩定狀態!你看著這臺機器,機器也看著你,相對無言,心中發毛。你不確定它什么時候會崩潰,也不曉得下一次投訴什么時候道理。

然后,我告訴大家現實層面的后果是什么。

“老人”氣昂昂,因為系統離不開他,所有“雷區”只有他了然于心。當出現緊急的bug時,只有他能夠搞定。你不但不能辭退他,還要給他加薪。

新人見光死,但凡招聘來維護這個系統的,除了改出更多的bug外,基本上一個月內就走人,到了外面還宣揚這個公司的軟件質量有夠差夠爛。

隨著產品的后續升級,幾個月沒有接觸這個系統的原創者會發現,很多雷區他本人也忘記了,于是每次的產品升級維護周期越來越長,因為修改一個功能會冒出很多bug,而按下一個bug,會彈出其他更多的bug。在這期間,又會產生更多的全局變量。終于有一天他告訴老板,不行啦不行啦,資源不夠了,ram或者flash空間太小了,升級升級。

客戶投訴不斷,售后也快崩潰了,業務員也不敢推薦此產品了,市場份額越來越小,公司形象越來越糟糕。

以上關于extern的建議來源于黃工的分享

四、慎用指針

指針對于初學者來說本來就是一個不易理解的東西,初學者一般都不能夠真正的理解指針,并且正確的使用指針,下面是初學者常犯的錯誤:

空指針:指針值為NULL的指針叫空指針,不能運行解引用,一旦解引用空指針就會產生段錯誤。

NULL在大多數系統的值為0,該地址儲存操作系統重啟的數據。

NULL也被當作錯誤標志,如果函數的返回值是指針類型,當它的值是NULL時說明執行出現錯誤。

如何避免空指針產生的段錯誤:對來歷不明的指針進行解引用前要先判斷是否為空

野指針:指針變量的值是不確定的,隨機的,未知的,這種指針被稱為野指針。

對野指針進行解引用的后果:一切正常 (運氣好)、段錯誤 (大概率)、臟數據 (堆內存申請的越多,臟數據可能性越大)。

終結出來還是那句話:**別人寫的goto我能看懂,但是我自己不會去寫goto!**

五、編程規范

我在這里給大家分享一寫我們公司的編程規范,大家可以學習一下!

不允許在C文件中使用“extern”來申明外部函數或全局變量;

禁止使用八進制數;

bit位變量移植性差,應避免使用。推薦使用boolean類型;

bit fields位域變量移植性差,不應使用;

uint, sint使用機器字長,雖然速度快,但有溢出風險,應避免使用;

指針的數學運算只能用在指向數組或數組元素的指針上;

指針減法只能用在指向同一數組中元素的指針上;

數組的索引應當是指針數學運算的唯一可允許的方式;

不應在指針類型和整型之間進行強制轉換;

不應在某類型對象指針和其他不同類型對象指針之間進行強制轉換;

如果指針所指向的類型帶有const 或volatile 限定符,那么移除限定符的強制轉換是不允許的;

數學運算時,應有效防止數據溢出;

六、結語

關于編程規范的問題其實還有很多需要注意的事情,如果大家感興趣的話可以搜索一下網上總結好的編程規范范文,尤其是初學者,在最開始就要養成一個良好的編程習慣,不理解的東西就盡量不要使用!

最后愿讀到這篇文章的程序員們寫的代碼永無bug!

審核編輯 :李倩

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

    關注

    180

    文章

    7608

    瀏覽量

    137165
  • 代碼
    +關注

    關注

    30

    文章

    4803

    瀏覽量

    68759

原文標題:十年老程序員給我的一些C語言建議,真的是受益終生!

文章出處:【微信號:嵌入式悅翔園,微信公眾號:嵌入式悅翔園】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    EE-62:C語言中訪問短字內存

    電子發燒友網站提供《EE-62:C語言中訪問短字內存.pdf》資料免費下載
    發表于 01-07 14:02 ?0次下載
    EE-62:<b class='flag-5'>在</b><b class='flag-5'>C</b><b class='flag-5'>語言中</b>訪問短字內存

    EE-128:C語言中的DSP:從C調用匯編類成員函數

    電子發燒友網站提供《EE-128:C語言中的DSP:從C調用匯編類成員函數.pdf》資料免費下載
    發表于 01-07 13:48 ?0次下載
    EE-128:<b class='flag-5'>C</b><b class='flag-5'>語言中</b>的DSP:從<b class='flag-5'>C</b>調用匯編類成員函數

    C語言中申請的堆內存能不能自動釋放

    C語言中申請的堆內存能不能自動釋放?每次都要手動 free 太麻煩,也容易忘記。 學過 C++ 的同學,應該首先能想到智能指針。 但是這是C
    的頭像 發表于 11-27 09:33 ?142次閱讀

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
    的頭像 發表于 11-01 16:51 ?381次閱讀

    C語言關鍵字--typedef

    C語言關鍵字使用方法學習指南!
    的頭像 發表于 10-07 12:44 ?300次閱讀

    探索AC自動機:多關鍵詞搜索的原理與應用案例

    引言 目前,大多數自由文本搜索技術采用類似于Lucene的策略,通過解析搜索文本為各個組成部分來定位關鍵詞。這種方法處理少量關鍵詞時表現良好。但當搜索的關鍵詞數量達到10萬個或更多時
    的頭像 發表于 08-26 15:55 ?915次閱讀
    探索AC自動機:多<b class='flag-5'>關鍵詞</b>搜索的原理與應用案例

    c語言中從左到右結合怎么看

    C語言中,操作符的結合性(Associativity)是指當操作符表達式中連續出現時,它們如何與操作數結合的順序。對于大多數二元操作符(即需要兩個操作數的操作符),
    的頭像 發表于 08-20 11:42 ?975次閱讀

    中國信通院發布“2024云計算十大關鍵詞

    據研究所所長何寶宏會上對“2024云計算十大關鍵詞”進行了解讀。中國信通院云大所何寶宏所長發布2024云計算十大關鍵詞十大關鍵詞分別是:應用現代化、大模型云服務、智
    的頭像 發表于 08-02 08:28 ?657次閱讀
    中國信通院發布“2024云計算十大<b class='flag-5'>關鍵詞</b>”

    快速掌握C語言關鍵

    C語言中的32個關鍵字你知道多少個呢?根據關鍵字的作用分為四類:數據類型關鍵字、控制語句關鍵字、
    的頭像 發表于 07-06 08:04 ?372次閱讀
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>關鍵</b>字

    嵌入式系統中C語言結構體的基礎實現與應用

    C語言中的數組只能允許程序員定義存儲相同類型數據。但是結構是C語言編程中允許您存儲不同數據類型的數據。
    發表于 03-12 14:29 ?522次閱讀
    嵌入式系統中<b class='flag-5'>C</b><b class='flag-5'>語言</b>結構體的基礎實現與應用

    C語言中的typedef的應用

    C 語言提供了 typedef 關鍵字,您可以使用它來為類型取一個新的名字。下面的實例為單字節數字定義了一個術語 BYTE。
    發表于 03-06 11:34 ?403次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的typedef的應用

    介紹C語言中錯誤處理和異常處理的一些常用的方法和策略

    C語言是一種低級的、靜態的、結構化的編程語言,它沒有提供像C++或Java等高級語言中的異常處理機制,例如try-catch-finally
    的頭像 發表于 02-28 14:25 ?642次閱讀

    C語言中的錯誤處理機制解析

    C 語言不提供對錯誤處理的直接支持,但是作為一種系統編程語言,它以返回值的形式允許您訪問底層數據。
    的頭像 發表于 02-26 11:19 ?528次閱讀

    vb語言c++語言的區別

    Microsoft開發的一種面向對象的事件驅動編程語言。它的設計目標是簡化編程過程,讓初學者也能快速上手。與之相比,C++語言是一種通用的、面向對象的編程語言,其設計目標是提供高性能的
    的頭像 發表于 02-01 10:20 ?2393次閱讀

    如何解決C語言中的“訪問權限沖突”異常?C語言引發異常原因分析

    如何解決C語言中的“訪問權限沖突”異常?C語言引發異常原因分析? C
    的頭像 發表于 01-12 16:03 ?5936次閱讀
    主站蜘蛛池模板: 国产AV精品白浆一区二| 秋霞电影院兔费理论84MB| 亚洲午夜精品一区二区公牛电影院| 久久精品熟女亚洲AV国产| 成人毛片18岁女人毛片免费看| 亚洲免费精品| 丝袜美腿美女被狂躁在线观看| 老司机试看午夜| 黑色丝袜美女被网站| yellow在线观看免费直播 | 青青草 久久久| 久久婷婷五月综合色情| 国产亚洲精品精华液| 成人中文字幕在线| 99在线观看精品| 在线观看亚洲 日韩 国产| 亚洲刺激视频| 无码不卡中文字幕在线观看| 欧美亚洲日韩在线在线影院 | 青柠在线观看免费播放电影| 久久免费资源福利资源站| 国内精品自线在拍2020不卡| 国产99精品在线观看| videossexotv极度另类| 999久久久无码国产精蜜柚| 在线播放一区二区精品产| 亚洲无吗精品AV九九久久| 亚洲精品高清在线| 亚洲福利电影一区二区?| 午夜伦理在线观看| 桃色园社区| 玩50岁四川熟女大白屁股直播| 日韩丰满少妇无码内射| 欧美Av无码高清在线| 蜜臀AV浪潮99国产麻豆| 美女搞鸡网站| 免费看欧美xxx片| 男人和女人一级黄色大片| 嫩小幼处在线| 欧美亚洲日韩在线在线影院| 欧美午夜理伦三级在线观看|