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

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

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

3天內不再提示

你知道怎么寫簡單的C代碼?

痞子衡嵌入式 ? 來源:痞子衡嵌入式 ? 作者:痞子衡嵌入式 ? 2022-05-19 11:18 ? 次閱讀

不知道大家有沒有這樣的經歷,當你來到一個新的公司或者是接手一個新的項目的時候,最怕的就是看前任的代碼(外加沒有文檔),最氣人的還是,連簡單的注釋都沒有多少,每當遇到這種情況都想把前任程序員拉出來斃了。

吐槽歸吐槽,誰的新歡不是誰的舊愛呢?自己寫完的項目可能也要交給后來人,那我們可能是想被斃掉的那一位了。我仔細想了想,可能一切的鍋都得歸于我們寫代碼時候的炫技。

程序語言都會提供這樣的或者那樣的特性,這些特性在某些時候可以幫助我們省些代碼或者在特定情況幫助我們減少失誤帶來的影響。我相信存在即合理,然而語言的有些特性并不是什么好東西,很多特性都經不起時間的考驗(代碼的不斷迭代),最后帶來的bug可能很難找到。

還有一點,我相信每個程序員都想要寫好代碼,或者認為短小精悍的代碼才算好。我們也會經常吹牛逼說:這個功能別人要寫100行,我不到一半行就搞定了。不是說不好,但是很多情況,利用語言里的一些特殊構造來縮減代碼可能會讓人難以理解。

也就是說:并不是語言提供什么特性,我們就一定要使用起來。實際上我們只需要其中很小的一部分功能,就能寫出優秀的代碼,實現特定的功能。

下面我根據一些經驗,針對一些有問題的語言特性,規范一些代碼,為什么這樣能讓代碼更簡單。

切記不要省略花括號

這個相信大家都有體會,也是經常會這么用的,比如:

if(condition1)
action1();

而不是

if(condition1){
action1();
}

這種情況最起碼可以省了一兩行代碼了,而且也還算是很好看。但是這樣也會經常引起一些意想不到的問題,比如,在后面想要多加一句話action2()到這個if里面,有可能會把代碼改成:

if(condition1)
action1();
action2();

這可不是python,當我們都有縮進的時候,潛意識里肯定是以為它們是在一起的,以為它們只會在if的條件為真的時候執行,然而action2()卻其實在if外面,它會被無條件的執行。

看似很簡單的問題,可能都很容易發現這個錯誤,但實際上卻容易被忽視。只要是if-else語句,把花括號全都打上,就可以不用擔心漏掉了,相當于沒這個特性,這樣就可以保持完全的一致性,減少不必要的思考。

if(condition1){
action1();
action2();
}

避免使用自增減表達式(i++,++i,i–,–i)

我們總喜歡騷操作,在我之前寫過的一篇文章中淺析C語言中一些“令人吃驚”的結構 ,表明C語言會同意一些"令人震驚"的結構,但實際上自增減操作表達式其實是歷史遺留的設計失誤。

像是c = a+++++b;這種類型的表達式含義比較蹊蹺,非常容易弄錯,混淆纏繞在一起,把語義搞得烏七八糟。

這種表達式的結果可能取決于求值順序,在某種編譯器下能正確運行,換一個編譯器就可能出現離奇的錯誤了,當然這個我并沒有驗證,但這種看起來太騷了。

如果你想寫function(i++),你完全可以把它拆成

intt=i;
i+=1;
function(t);

這兩個表達式分解成兩步,如果想寫function(++i),可以拆成

i+=1;
function(i);

拆開之后的代碼,含義完全一致,卻清晰很多。到底更新是在取值之前還是之后,一目了然。

當然我們也會有更細致的爭論,例如:i++或者++i的效率比拆開之后要高,當看到這種究根源的結論我其實是很感興趣的,但實際上這些代碼經過基本的編譯器優化之后,生成的機器代碼是完全沒有區別的。

而且自增減表達式只有在for循環的update部分寫成單獨的一行這兩種情況下才可以安全的使用,這兩種情況是完全沒有歧義的。其余情況需要避免使用,比如用在復雜的表達式里面,比如function(i++),function(++i)等等。

合理使用括號

使用括號可以確保表達式的優先級,而我們總是不大喜歡在表達式中添加括號,但是盲目依賴操作符優先級往往得不償失。

當然對于簡單的加減乘除我們可以使用,比如1+4*9,而不需要寫成1+(4*9),然而在一些稍微復雜一點的表達式中我們可能不喜歡括號,比如1<<2+4*9

當然,這也考研我們的基本功,但我相信移位操作<<的優先級,大部分人第一眼可能是不大熟悉的,所以這導致了我們再一次廢了多一點腦子或者Google了一下。

由于x << 1相當于把x乘以2,那么這個表達式可能會被誤以為(1<<2)+(4*9),然而實際上<<的優先級比加法+還要低,所以這表達式其實相當于1<<(2+4*9)

解決這個問題的辦法,不是要求每個人都去把操作符優先級表給硬背下來,而是合理的加入括號。雖然沒有括號也表示同樣的意思,但是加上括號就更加清晰了,是不是呢?

總結

再次聲明,這里只是舉了幾個簡單的例子,所謂存在即合理,特性既然存在肯定是在某種特定情況下有用武之地的,這一點我們毋庸置疑。

但實際到我們自己敲的代碼,或者在工程應用中,為了避免花過多的時間與精力放在這種費眼睛、費腦子的事情上,是適得其反的。

我們需要寫簡單的代碼,需要看簡單的代碼,需要沒有歧義與爭論的代碼,這才是我們的終極目標,希望本文所闡述的思想對大家有用處。


			

									

									

審核編輯 :李倩


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

    關注

    117

    文章

    3794

    瀏覽量

    81270
  • 代碼
    +關注

    關注

    30

    文章

    4816

    瀏覽量

    68873

原文標題:如何寫簡單的C代碼?

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

收藏 人收藏

    評論

    相關推薦

    什么樣的代碼會被編譯器優化

    現在的編譯器有多智能,可能辛辛苦苦代碼,在編譯器看來就是幾句廢話,直接被刪除掉。
    的頭像 發表于 01-16 16:38 ?126次閱讀

    電源的這些常識知道嗎?

    因為電源部件是消耗品,導致電源有一定的使用壽命。因此,使用一定時間后,我們或多或少會出現一些異?,F象。一些簡單的學生可以簡單地自己解決。然而,許多情況下,涉及技術問題的人無法開始。這時,我們需要知道
    的頭像 發表于 09-26 13:58 ?278次閱讀

    hex文件如何查看原c語言代碼

    是處理器可以直接執行的指令,而 C 語言代碼則是人類可讀的高級編程語言代碼。 然而,如果你想要從 .hex 文件中獲取一些有用的信息或者對程序進行分析,可以考慮以下幾種方法: 反匯編
    的頭像 發表于 09-02 10:37 ?2670次閱讀

    技術干貨驛站 ▏深入理解C語言:掌握常量,讓代碼更加穩固高效!

    C語言的世界中,常量是一種不可忽視的元素。無論是在編寫簡單代碼,還是構建復雜的系統,常量都能為的程序帶來更高的穩定性和可靠性。在這篇
    的頭像 發表于 08-29 13:59 ?2982次閱讀
    技術干貨驛站 ▏深入理解<b class='flag-5'>C</b>語言:掌握常量,讓<b class='flag-5'>你</b>的<b class='flag-5'>代碼</b>更加穩固高效!

    知道影響貼片電感發熱的因素有哪些嗎?

    知道影響貼片電感發熱的因素有哪些嗎?
    的頭像 發表于 08-17 14:24 ?513次閱讀
    <b class='flag-5'>你</b><b class='flag-5'>知道</b>影響貼片電感發熱的因素有哪些嗎?

    知道貼片電感故障時可能出現的癥狀嗎?

    知道貼片電感故障時可能出現的癥狀嗎?
    的頭像 發表于 08-17 14:20 ?425次閱讀
    <b class='flag-5'>你</b><b class='flag-5'>知道</b>貼片電感故障時可能出現的癥狀嗎?

    知道共模電感用錯了會有什么影響嗎

    電子發燒友網站提供《知道共模電感用錯了會有什么影響嗎.docx》資料免費下載
    發表于 07-30 10:42 ?0次下載

    簡單C程序設計

    電子發燒友網站提供《最簡單C程序設計.pptx》資料免費下載
    發表于 05-28 16:41 ?10次下載

    知道貼片電感上面的數字代表什么嗎

    貼片電感大家都比較熟悉,我們知道貼片電感的表面通常會標有一串數字,那么,知道這上面的數字代表什么意思嗎?本篇我們就來給大家簡單科普一下。 1、標稱值:貼片電感上的數字通常是其標稱電感
    的頭像 發表于 05-10 11:10 ?727次閱讀

    如何提升代碼質量與效率的秘訣

    提高編程能力其實沒有捷徑,最佳方式就是多代碼。 不過,除了大量代碼,提升編程能力還需要大量閱讀別人
    的頭像 發表于 04-28 14:53 ?425次閱讀
    如何提升<b class='flag-5'>代碼</b>質量與效率的秘訣

    C/C++代碼動態測試工具VectorCAST插樁功能演示#代碼動態測試 #C++

    C++代碼
    北匯信息POLELINK
    發布于 :2024年04月18日 11:57:45

    阿里云內部全面推行AI代碼

    阿里云正在內部全面推行 AI 編程,使用通義靈碼輔助程序員代碼、讀代碼、查 BUG、優化代碼等。
    的頭像 發表于 04-07 09:22 ?580次閱讀

    這些磁棒電感發熱解決方法知道幾個

    這些磁棒電感發熱解決方法知道幾個 gujing 編輯:谷景電子 磁棒電感在使用中發熱是比較普遍的問題之一,但假如發熱嚴重就需要及時進行處理,不然就會影響到設備的性能和運作。所以,磁棒電感發熱嚴重
    的頭像 發表于 03-06 22:10 ?409次閱讀

    知道激光鉆孔技術有多牛嗎?看完這篇文章就明白了

    知道激光鉆孔技術有多牛嗎?看完這篇文章就明白了
    的頭像 發表于 02-29 17:09 ?1051次閱讀

    使用aurix c/c++任務調試器調試代碼,為什么無法得到結果?

    我正在嘗試使用 aurix 開發工作室 c/c++ 任務調試器調試代碼,但無法得到結果。 CAN 幫我了解需要安裝哪些軟件以及需要遵循哪些步驟來檢查結果。 我正在嘗試調試 adc 過
    發表于 01-30 06:24
    主站蜘蛛池模板: 在线观看国产高清免费不卡| 69夫妇交友群| free18sex性自拍裸舞| 巨黄的肉辣文np| 正能量不良WWW免费窗口| 寂寞夜晚视频高清观看免费| 亚州免费一级毛片| 国产婷婷色一区二区三区在线| 无码国产成人777爽死在线观看| 国产 精品 亚洲 欧美 高清| 色噜噜噜视频| 国产99小视频| 午夜精品久久久久久99热蜜桃| 国产剧果冻传媒星空在线观看| 性色无码AV久久蜜臀| 国产一区二区波多野结衣| 亚洲日本欧美国产在线视| 久久国产露脸老熟女熟69| 最近2019年日本中文免费字幕| 免费a视频在线观看| caoporn 超碰在线视频| 日本一卡二卡三卡四卡无卡免费播放 | 脔到她哭H粗话HWWW男男动漫| 中文字幕在线观看网址| 免费在线a| 成人国产免费| 亚洲 欧美 国产 综合 在线| 狠狠插狠狠干| 中文字幕不卡在线高清| 暖暖视频在线观看高清...| 扒开腿狂躁女人GIF动态图 | 亚洲人成网站在线观看90影院| 精品无人区一区二区三区| 中文在线观看免费网站| 青草视频久久| 国产亚洲精品久久久久久白晶晶 | 波野结衣qvod| 亚洲AV噜噜狠狠网址蜜桃尤物| 久久久精品国产免费A片胖妇女| 99C视频色欲在线| 帅哥男男GV在线1080P|