C語言

當前位置 /首頁/計算機/C語言/列表

c語言中那些被忽略的知識點

導語:C語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。下面我們來看看c語言中那些被忽略的知識點,希望對大家有所幫助。

c語言中那些被忽略的知識點

c語言作為程式設計師來說,是入門語言。c語言的教材也是多的數不勝數,但是呢,有的c語言教材100-200多頁,有的教材600頁+,然而很多學者都是學的前者教材。

為什麼大家常說的簡單的c語言都可以編寫那麼厚的教材?其一,c語言並不簡單,或者說,敢說c語言簡單的人都不是一般人;其二,c語言知識點覆蓋面廣,200多頁的教材只是教會了你怎麼用,並沒有教會你多少實質性內容;其三,很多實用的知識點,在200多頁的教材也並沒有體現出來。

今天我們主要聊聊那些一般不被重用的,但是卻對提升程式碼質量和效率有奇佳效果的知識點。實話說,沒有進公司前,我也忽略了這些,有一些甚至上學期間都沒見過。好糗。

正在看這篇文章的朋友,如果你還在上學階段,請告訴我,你聽過"斷言"這個名詞嗎?如果沒聽過,接下來我就給你好好說說,讓你瞭解瞭解,如果你聽過,給你點贊。

1.程式一般分為兩個版本,Debug和Release版本g版本用於內部除錯,Release版本給使用者使用。斷言的關鍵字是assert.先看下面一個例項。

程式碼功能不用多解釋,隨便寫的一個演算法。斷言assert用於檢查"不應該"發生的情況。如上程式碼在執行的時候,如果assert的引數為假,那麼程式會在assert中止,同時會提示你在哪個檔案的多少行出現了什麼錯誤,也就是assert所在的位置。

需要格外注意的是,assert不是一個函式,是巨集。程式設計師可以把assert看成一個在任何系統狀態下都可以安全使用的無害測試手段。並且,使用assert可以省略if else的判斷,並且他比if else更智慧。如果程式在assert終止,並不是說含有該assert的函式有錯誤,而是呼叫者除了差錯,assert可以更方便的幫助我們找到發生錯誤的原因。

rt作為一個巨集,原型定義在中,如下圖,就是判斷表示式的`真假來反饋給程式設計師資訊。

3.任何事物的出現都有利和弊,assert也是如此,他的缺點是,如果頻繁呼叫assert,會極大地影響到程式的效能,增加格外的開銷。所以,工具雖好用,可不要貪用哦。在除錯結束後,可以在“#include ”前加 #define NDEBUG來禁用assert.如下:

4.瞭解了斷言assert,在實際使用中,務必注意以下點:

①使用斷言捕捉不應該發生的非法情況。不要混淆非法情況與錯誤情況的區別,後者是必然存在並且是一定要解決的bug。

②assert可以放在程式中的任何位置,但是一般放在程式的入口處,檢查引數的有效性或合法性。

③在編寫函式的時候,要清楚在該函式中,我要做哪些假定,一旦確定了的假定,就需要使用斷言對假定進行檢查。

④越來越多的程式設計師都有了保證程式的健壯性的意識,很好。也就是進行了很多防錯設計,當進行防錯設計時,如果“不可能發生的事”的確發生了,就需要使用斷言報警。

TAG標籤:語言 知識點 #