91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

電子工程師 ? 來源:嵌入式悅翔園 ? 作者:嵌入式悅翔園 ? 2022-08-08 10:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、前言

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

二、慎用goto關(guān)鍵詞

關(guān)于goto語句的爭議已經(jīng)不是一天兩天了,大部分C語言老師在講到goto這關(guān)鍵字的時(shí)候一般都會叫大家慎用goto關(guān)鍵字。既然goto語句C語言標(biāo)準(zhǔn)中定義了,那為什么不建議使用呢?

因?yàn)間oto語句不僅讓代碼的可讀性很差,隨意的跳出還會給程序帶來安全隱患。但正是這種幾乎被各大公司明令禁止使用的語句,在Linux內(nèi)核中卻被大量使用著。這只能說明一點(diǎn),那就是因?yàn)槲覀兯教肆?,公司怕因?yàn)槟愕囊痪鋑oto造成代碼莫名跑飛!

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

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

不建議使用goto語句的原因還有以下幾點(diǎn)原因:

goto語句可以被結(jié)構(gòu)化程序的別的語句代替;

goto語句會導(dǎo)致程序可讀性下降,因?yàn)樵趯?shí)際程序中,goto可以跳到任何地方,可以往前可以往后,看程序慢慢看,看到goto然后又要去找標(biāo)識符到底跳到了哪里,可讀性嚴(yán)重下降,讓讀程序的人很不舒服;

調(diào)試不舒服,調(diào)試程序時(shí),由于有g(shù)oto亂跳的,這就很難調(diào)試,去掉嘛,要重新寫代碼,不去掉,無從下手;

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

三、慎用extern關(guān)鍵詞

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

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

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

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

嵌入式特別是單片機(jī)的程序,最易犯的錯(cuò)誤是全局變量滿天飛。此現(xiàn)象在早期匯編轉(zhuǎn)型過來的程序員以及初學(xué)者中常見,這幫家伙幾乎把全局變量當(dāng)作函數(shù)形參來用。

每當(dāng)看到這種程序,我總要戚眉變臉而后拍桌怒喝。沒錯(cuò),就是怒喝,我不否認(rèn)全局變量的重要性,但我認(rèn)為要十分謹(jǐn)慎地使用它,濫用全局變量會引申帶來其它更為嚴(yán)重的結(jié)構(gòu)性系統(tǒng)問題。

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

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

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

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

無需多言,您已經(jīng)成功得到一個(gè)畸形的系統(tǒng),它處于一個(gè)神秘的穩(wěn)定狀態(tài)!你看著這臺機(jī)器,機(jī)器也看著你,相對無言,心中發(fā)毛。你不確定它什么時(shí)候會崩潰,也不曉得下一次投訴什么時(shí)候道理。

然后,我告訴大家現(xiàn)實(shí)層面的后果是什么。

“老人”氣昂昂,因?yàn)橄到y(tǒng)離不開他,所有“雷區(qū)”只有他了然于心。當(dāng)出現(xiàn)緊急的bug時(shí),只有他能夠搞定。你不但不能辭退他,還要給他加薪。

新人見光死,但凡招聘來維護(hù)這個(gè)系統(tǒng)的,除了改出更多的bug外,基本上一個(gè)月內(nèi)就走人,到了外面還宣揚(yáng)這個(gè)公司的軟件質(zhì)量有夠差夠爛。

隨著產(chǎn)品的后續(xù)升級,幾個(gè)月沒有接觸這個(gè)系統(tǒng)的原創(chuàng)者會發(fā)現(xiàn),很多雷區(qū)他本人也忘記了,于是每次的產(chǎn)品升級維護(hù)周期越來越長,因?yàn)樾薷囊粋€(gè)功能會冒出很多bug,而按下一個(gè)bug,會彈出其他更多的bug。在這期間,又會產(chǎn)生更多的全局變量。終于有一天他告訴老板,不行啦不行啦,資源不夠了,ram或者flash空間太小了,升級升級。

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

以上關(guān)于extern的建議來源于黃工的分享

四、慎用指針

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

空指針:指針值為NULL的指針叫空指針,不能運(yùn)行解引用,一旦解引用空指針就會產(chǎn)生段錯(cuò)誤。

NULL在大多數(shù)系統(tǒng)的值為0,該地址儲存操作系統(tǒng)重啟的數(shù)據(jù)。

NULL也被當(dāng)作錯(cuò)誤標(biāo)志,如果函數(shù)的返回值是指針類型,當(dāng)它的值是NULL時(shí)說明執(zhí)行出現(xiàn)錯(cuò)誤。

如何避免空指針產(chǎn)生的段錯(cuò)誤:對來歷不明的指針進(jìn)行解引用前要先判斷是否為空

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

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

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

五、編程規(guī)范

我在這里給大家分享一寫我們公司的編程規(guī)范,大家可以學(xué)習(xí)一下!

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

禁止使用八進(jìn)制數(shù);

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

bit fields位域變量移植性差,不應(yīng)使用;

uint, sint使用機(jī)器字長,雖然速度快,但有溢出風(fēng)險(xiǎn),應(yīng)避免使用;

指針的數(shù)學(xué)運(yùn)算只能用在指向數(shù)組或數(shù)組元素的指針上;

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

數(shù)組的索引應(yīng)當(dāng)是指針數(shù)學(xué)運(yùn)算的唯一可允許的方式;

不應(yīng)在指針類型和整型之間進(jìn)行強(qiáng)制轉(zhuǎn)換;

不應(yīng)在某類型對象指針和其他不同類型對象指針之間進(jìn)行強(qiáng)制轉(zhuǎn)換;

如果指針?biāo)赶虻念愋蛶в衏onst 或volatile 限定符,那么移除限定符的強(qiáng)制轉(zhuǎn)換是不允許的;

數(shù)學(xué)運(yùn)算時(shí),應(yīng)有效防止數(shù)據(jù)溢出;

六、結(jié)語

關(guān)于編程規(guī)范的問題其實(shí)還有很多需要注意的事情,如果大家感興趣的話可以搜索一下網(wǎng)上總結(jié)好的編程規(guī)范范文,尤其是初學(xué)者,在最開始就要養(yǎng)成一個(gè)良好的編程習(xí)慣,不理解的東西就盡量不要使用!

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

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7644

    瀏覽量

    145579
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73960

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    關(guān)鍵詞搜索京東列表 API 技術(shù)對接指南

    一、前言 電商數(shù)據(jù)服務(wù)、代購集運(yùn)系統(tǒng)搭建、電商平臺競品分析、自有商城商品同步等業(yè)務(wù)場景中,京東商品列表的精準(zhǔn)、實(shí)時(shí)獲取是核心環(huán)節(jié)之一。 二、接口概述 關(guān)鍵詞搜索京東列表 API,核心是通過京東開放
    的頭像 發(fā)表于 02-05 16:36 ?358次閱讀

    野莓平臺關(guān)鍵詞商品搜索API接口使用指南

    ? 電商平臺開發(fā)中,API接口是實(shí)現(xiàn)高效商品搜索的關(guān)鍵。野莓平臺(假設(shè)為一個(gè)虛構(gòu)的電商平臺)提供了關(guān)鍵詞商品搜索API,允許開發(fā)者通過HTTP請求快速檢索商品信息。本技術(shù)帖將逐步介紹該API
    的頭像 發(fā)表于 02-04 16:48 ?507次閱讀
    野莓平臺<b class='flag-5'>關(guān)鍵詞</b>商品搜索API接口使用指南

    京東關(guān)鍵詞的應(yīng)用

    京東關(guān)鍵詞應(yīng)用核心是圍繞搜索匹配與流量獲取,貫穿商品上架、搜索優(yōu)化、付費(fèi)推廣、精細(xì)化運(yùn)營等全鏈路,以精準(zhǔn)匹配用戶需求、提升排名與轉(zhuǎn)化為目標(biāo)。以下是具體應(yīng)用與實(shí)操方法: 一、關(guān)鍵詞分類與篩選
    的頭像 發(fā)表于 01-20 09:05 ?507次閱讀

    接入京東關(guān)鍵詞API的核心利弊分析

    接入京東關(guān)鍵詞API的核心價(jià)值在于通過官方合規(guī)的數(shù)據(jù)能力,驅(qū)動(dòng)電商運(yùn)營的精細(xì)化與自動(dòng)化,但同時(shí)也存在接入門檻、成本投入及合規(guī)約束等潛在問題。以下從“利”“弊”兩大維度展開詳細(xì)分析,并給出平衡策略,為
    的頭像 發(fā)表于 01-14 15:39 ?222次閱讀

    京東關(guān)鍵詞API接口獲取

    具體的調(diào)用示例。 一、核心前提說明 京東 沒有向普通個(gè)人用戶開放免費(fèi)的關(guān)鍵詞搜索 API ,所有合法可用的接口均需通過「京東開放平臺」申請,且多數(shù)接口要求企業(yè)資質(zhì),同時(shí)有調(diào)用頻率限制和費(fèi)用規(guī)則;非官方的第三方接口存在合規(guī)性、穩(wěn)定性風(fēng)險(xiǎn)
    的頭像 發(fā)表于 01-09 14:16 ?357次閱讀

    京東關(guān)鍵詞 API 場景的需求梳理模板

    京東關(guān)鍵詞 API 場景需求梳理模板 本模板適用于 聯(lián)盟推廣、商家運(yùn)營、工具開發(fā)、市場分析 等基于京東關(guān)鍵詞 API 的業(yè)務(wù)需求梳理,可直接用于需求文檔撰寫、API 對接方案評審。 核心模塊 填寫項(xiàng)
    的頭像 發(fā)表于 01-08 13:45 ?159次閱讀

    京東關(guān)鍵詞的應(yīng)用場景

    京東關(guān)鍵詞 API 層面的應(yīng)用,是串聯(lián) 商品檢索、數(shù)據(jù)運(yùn)營、商業(yè)決策、工具開發(fā) 的核心紐帶,結(jié)合京東開放平臺 API(如商品查詢、聯(lián)盟推廣、數(shù)據(jù)統(tǒng)計(jì)類接口),其應(yīng)用場景覆蓋電商全鏈路的技術(shù)與商業(yè)
    的頭像 發(fā)表于 01-08 13:38 ?454次閱讀

    京東關(guān)鍵詞API賦能

    京東關(guān)鍵詞 API 賦能:從數(shù)據(jù)采集到業(yè)務(wù)增長的全鏈路落地指南 京東關(guān)鍵詞 API(以item_search/item_search_pro為核心)的核心賦能價(jià)值,是 打破電商數(shù)據(jù)壁壘 ,將平臺
    的頭像 發(fā)表于 01-07 09:53 ?510次閱讀

    京東關(guān)鍵詞item_search-按關(guān)鍵字搜索京東商品

    京東關(guān)鍵詞搜索(item_search)技術(shù)實(shí)現(xiàn)指南:合規(guī) API 調(diào)用 + 數(shù)據(jù)運(yùn)營實(shí)戰(zhàn) 京東商品關(guān)鍵詞搜索(item_search)是電商技術(shù)從業(yè)者核心需求之一,需優(yōu)先采用 京東官方開放平臺
    的頭像 發(fā)表于 01-06 09:27 ?833次閱讀

    淘寶搜索API:關(guān)鍵詞優(yōu)化工具,提升曝光率!

    ? ?電商領(lǐng)域,曝光率是決定商品銷量的關(guān)鍵因素之一。淘寶作為國內(nèi)領(lǐng)先的電商平臺,提供了強(qiáng)大的搜索API接口,幫助開發(fā)者構(gòu)建關(guān)鍵詞優(yōu)化工具,從而提升商品搜索結(jié)果中的排名和曝光。本文將
    的頭像 發(fā)表于 01-05 15:38 ?186次閱讀
    淘寶搜索API:<b class='flag-5'>關(guān)鍵詞</b>優(yōu)化工具,提升曝光率!

    利用京東搜索關(guān)鍵詞 API 接口賦能電商運(yùn)營

    數(shù)據(jù),為選品、標(biāo)題優(yōu)化、定價(jià)策略、競品監(jiān)控等關(guān)鍵運(yùn)營環(huán)節(jié)提供數(shù)據(jù)支撐。本文將從 API 核心價(jià)值、技術(shù)實(shí)現(xiàn)(多語言代碼示例)、運(yùn)營場景落地、避坑指南四個(gè)維度,拆解如何通過該 API 實(shí)現(xiàn)運(yùn)營效率與業(yè)績雙提升。 一、京東搜索關(guān)鍵詞
    的頭像 發(fā)表于 01-05 09:21 ?302次閱讀

    淺談京東關(guān)鍵詞

    格式的字符串)。 關(guān)鍵詞與搜索結(jié)果的關(guān)聯(lián)性 :關(guān)鍵詞的精準(zhǔn)度決定爬取結(jié)果的相關(guān)性,京東搜索會對關(guān)鍵詞進(jìn)行分詞匹配(如 “Python 實(shí)戰(zhàn)書籍” 會拆分匹配 “Python”、“實(shí)戰(zhàn)”、“書籍”)。 請求參數(shù)中的
    的頭像 發(fā)表于 01-04 10:40 ?642次閱讀

    單片機(jī)c語言中定義字節(jié)怎么定義?

    定義位可以用***it但是定義字節(jié)呢?還有就是比如匯編中的DPTR的DPH和DPLc語言中怎樣定義的呢?
    發(fā)表于 12-29 06:32

    TypedefC語言中的應(yīng)用

    Typedef C語言中頻繁用以聲明一個(gè)已經(jīng)存在的數(shù)據(jù)類型的同義字。也可以用預(yù)處理器做類似的事。例如,思考一下下面的例子: #define dPS struct s * type
    發(fā)表于 12-22 13:53

    搜索關(guān)鍵詞獲取商品詳情接口的設(shè)計(jì)與實(shí)現(xiàn)

    ? ??電商、內(nèi)容平臺等應(yīng)用中,用戶經(jīng)常通過輸入關(guān)鍵詞搜索商品并獲取詳情。設(shè)計(jì)一個(gè)高效、可靠的API接口是核心需求。本文將逐步介紹如何設(shè)計(jì)并實(shí)現(xiàn)一個(gè)“搜索關(guān)鍵詞獲取商品詳情”的接口,涵蓋
    的頭像 發(fā)表于 10-20 15:37 ?504次閱讀
    搜索<b class='flag-5'>關(guān)鍵詞</b>獲取商品詳情接口的設(shè)計(jì)與實(shí)現(xiàn)