菊廠C語言編碼規(guī)范?

嵌入式大雜燴 2023-09-08 20:27

作為程序開發(fā)者,避免不了閱讀別人代碼,那么就會涉及到到一門語言的編程規(guī)范。規(guī)范雖然不是語言本身的硬性要求,但是已經是每一個語言使用者約定俗成的一個規(guī)范。

按照編程規(guī)范編寫的代碼,至少在代碼閱讀時,給人一種愉悅的心情,特別是強迫癥患者。另一方面,統(tǒng)一的編程風格,可以減少編寫錯誤,利于后期維護。

因為最近又開始進行純C語言的開發(fā),并且是基于SDK的開發(fā),所以添加的每一行代碼都應該與原來風格保持一致,不能因為一顆老鼠屎壞了一鍋湯。一個良好的編程規(guī)范也可以看出編程人員的細心程度與代碼質量。

之前待過的兩家公司,也都有各自總結的編程規(guī)范,但都不約而同的一致,適用本公司的軟件開發(fā)。這幾天有幸可以參閱華為技術有限公司的C語言編程規(guī)范,相比之下,寫的更加詳細。

至少接觸到了,在這個編程規(guī)范中體現了,并且還擴充了很多,我覺得有必要歸納總結,一遍日后查閱。先是學習規(guī)范,然后再積累規(guī)范,最后才是依規(guī)范編寫。

1、清晰第一

清晰性是易于維護、易于重構的程序必需具備的特征。代碼首先是給人讀的,好的代碼應當可以像文章一樣發(fā)聲朗誦出來。

2.、簡潔為美

簡潔就是易于理解并且易于實現。代碼越長越難以看懂,也就越容易在修改時引入錯誤。寫的代碼越多,意味著出錯的地方越多,也就意味著代碼的可靠性越低。因此,我們提倡大家通過編寫簡潔明了的代碼來提升代碼可靠性。廢棄的代碼(沒有被調用的函數和全局變量)要及時清除,重復代碼應該盡可能提煉成函數。

3、選擇合適的風格,與代碼原有的風格保持一致

產品所有人共同分享同一種風格所帶來的好處,遠遠超出為了統(tǒng)一而付出的代價。在公司已有編碼規(guī)范的指導下,審慎地編排代碼以使代碼盡可能清晰,是一項非常重要的技能。如果重構/修改其他風格的代碼時,比較明智的做法是根據現有代碼的現有風格繼續(xù)編寫代碼,或者使用格式轉換工具進行轉換成公司內部風格。

一、頭文件

原則1.1 頭文件中適合放置接口的聲明,不適合放置實現。

說明:頭文件是模塊(Module)或單元(Unit)的對外接口。頭文件中應放置對外部的聲明,如對外提供的函數聲明、宏定義、類型定義等。

原則1.2 頭文件應當職責單一。

說明:頭文件過于復雜,依賴過于復雜是導致編譯時間過長的主要原因。很多現有代碼中頭文件過大,職責過多,再加上循環(huán)依賴的問題,可能導致為了在.c中使用一個宏,而包含十幾個頭文件。

原則1.3 頭文件應向穩(wěn)定的方向包含。

說明:頭文件的包含關系是一種依賴,一般來說,應當讓不穩(wěn)定的模塊依賴穩(wěn)定的模塊,從而當不穩(wěn)定的模塊發(fā)生變化時,不會影響(編譯)穩(wěn)定的模塊。

規(guī)則1.1 每一個.c文件應有一個同名.h文件,用于聲明需要對外公開的接口。

說明:如果一個.c文件不需要對外公布任何接口,則其就不應當存在,除非它是程序的入口,如main函數所在的文件。

規(guī)則1.2 禁止頭文件循環(huán)依賴。

說明:頭文件循環(huán)依賴,指a.h包含b.h,b.h包含c.h,c.h包含a.h之類導致任何一個頭文件修改,都導致所有包含了a.h/b.h/c.h的代碼全部重新編譯一遍。

而如果是單向依賴,如a.h包含b.h,b.h包含c.h,而c.h不包含任何頭文件,則修改a.h不會導致包含了b.h/c.h的源代碼重新編譯。

規(guī)則1.3 .c/.h文件禁止包含用不到的頭文件。

說明:很多系統(tǒng)中頭文件包含關系復雜,開發(fā)人員為了省事起見,可能不會去一一鉆研,直接包含一切想到的頭文件,甚至有些產品干脆發(fā)布了一個god.h,其中包含了所有頭文件,然后發(fā)布給各個項目組使用,這種只圖一時省事的做法,導致整個系統(tǒng)的編譯時間進一步惡化,并對后來人的維護造成了巨大的麻煩。

規(guī)則1.4 頭文件應當自包含。

說明:簡單的說,自包含就是任意一個頭文件均可獨立編譯。如果一個文件包含某個頭文件,還要包含另外一個頭文件才能工作的話,就會增加交流障礙,給這個頭文件的用戶增添不必要的負擔。

規(guī)則1.5 總是編寫內部#include保護符(#define 保護)。

說明:多次包含一個頭文件可以通過認真的設計來避免。如果不能做到這一點,就需要采取阻止頭文件內容被包含多于一次的機制。

注: 沒有在宏最前面加上 _ ,即使用 FILENAME_H代替 ?FILENAME_H ,是因為一般以 _ 和 ?__ 開頭的標識符為系統(tǒng)保留或者標準庫使用,在有些靜態(tài)檢查工具中,若全局可見的標識符以 _ 開頭會給出告警。

定義包含保護符時,應該遵守如下規(guī)則:

1)保護符使用唯一名稱;

2)不要在受保護部分的前后放置代碼或者注釋。

規(guī)則1.6 禁止在頭文件中定義變量。

說明:在頭文件中定義變量,將會由于頭文件被其他.c文件包含而導致變量重復定義。

規(guī)則1.7 只能通過包含頭文件的方式使用其他.c提供的接口,禁止在.c中通過extern的方式使用外部函數接口、變量。

說明:若a.c使用了b.c定義的foo()函數,則應當在b.h中聲明extern int foo(int input);并在a.c中通過#include 來使用foo。禁止通過在a.c中直接寫extern int foo(int input);來使用foo,后面這種寫法容易在foo改變時可能導致聲明和定義不一致。這一點我們因為圖方便經常犯的。

規(guī)則1.8 禁止在extern "C"中包含頭文件。

說明:在extern "C"中包含頭文件,會導致extern "C"嵌套,Visual Studio對extern "C"嵌套層次有限制,嵌套層次太多會編譯錯誤。

建議1.1 一個模塊通常包含多個.c文件,建議放在同一個目錄下,目錄名即為模塊名。為方便外部使用者,建議每一個模塊提供一個.h,文件名為目錄名。

建議1.2 如果一個模塊包含多個子模塊,則建議每一個子模塊提供一個對外的.h,文件名為子模塊名。

建議1.3 頭文件不要使用非習慣用法的擴展名,如.inc。

建議1.4 同一產品統(tǒng)一包含頭文件排列方式。

二、函數

原則2.1 一個函數僅完成一件功能。

說明:一個函數實現多個功能給開發(fā)、使用、維護都帶來很大的困難。

原則2.2 重復代碼應該盡可能提煉成函數。

說明:重復代碼提煉成函數可以帶來維護成本的降低。

規(guī)則2.1 避免函數過長,新增函數不超過50行(非空非注釋行)。

說明:本規(guī)則僅對新增函數做要求,對已有函數修改時,建議不增加代碼行。

規(guī)則2.2 避免函數的代碼塊嵌套過深,新增函數的代碼塊嵌套不超過4層。

說明:本規(guī)則僅對新增函數做要求,對已有的代碼建議不增加嵌套層次。

規(guī)則2.3 可重入函數應避免使用共享變量;若需要使用,則應通過互斥手段(關中斷、信號量)對其加以保護。

規(guī)則2.4 對參數的合法性檢查,由調用者負責還是由接口函數負責,應在項目組/模塊內應統(tǒng)一規(guī)定。缺省由調用者負責。

規(guī)則2.5 對函數的錯誤返回碼要全面處理。

規(guī)則2.6 設計高扇入,合理扇出(小于7)的函數。

說明:扇出是指一個函數直接調用(控制)其它函數的數目,而扇入是指有多少上級函數調用它。如下圖:

img

規(guī)則2.7 廢棄代碼(沒有被調用的函數和變量)要及時清除。

建議2.1 函數不變參數使用const。

說明:不變的值更易于理解/跟蹤和分析,把const作為默認選項,在編譯時會對其進行檢查,使代碼更牢固/更安全。

建議2.2 函數應避免使用全局變量、靜態(tài)局部變量和I/O操作,不可避免的地方應集中使用。

建議2.3 檢查函數所有非參數輸入的有效性,如數據文件、公共變量等。

說明:函數的輸入主要有兩種:一種是參數輸入;另一種是全局變量、數據文件的輸入,即非參數輸入。函數在使用輸入參數之前,應進行有效性檢查。

建議2.4 函數的參數個數不超過5個。

建議2.5 除打印類函數外,不要使用可變長參函數。

建議2.6 在源文件范圍內聲明和定義的所有函數,除非外部可見,否則應該增加static關鍵字。

三、 標識符命名與定義

目前比較常用的如下幾種命名風格:

unix like風格:單詞用小寫字母,每個單詞直接用下劃線_分割,,例如text_mutex,kernel_text_address。

Windows風格:大小寫字母混用,單詞連在一起,每個單詞首字母大寫。不過Windows風格如果遇到大寫專有用語時會有些別扭,例如命名一個讀取RFC文本的函數,命令為ReadRFCText,看起來就沒有unix like的read_rfc_text清晰了。

原則3.1 標識符的命名要清晰、明了,有明確含義,同時使用完整的單詞或大家基本可以理解的縮寫,避免使人產生誤解。

原則3.2 除了常見的通用縮寫以外,不使用單詞縮寫,不得使用漢語拼音。

建議3.1 產品/項目組內部應保持統(tǒng)一的命名風格。

建議3.2 盡量避免名字中出現數字編號,除非邏輯上的確需要編號。

建議3.3 標識符前不應添加模塊、項目、產品、部門的名稱作為前綴。

建議3.4 平臺/驅動等適配代碼的標識符命名風格保持和平臺/驅動一致。

建議3.5 重構/修改部分代碼時,應保持和原有代碼的命名風格一致。

建議3.6 文件命名統(tǒng)一采用小寫字符。

規(guī)則3.2 全局變量應增加“g_”前綴。

規(guī)則3.3 靜態(tài)變量應增加“s_”前綴。

規(guī)則3.4 禁止使用單字節(jié)命名變量,但允許定義i、j、k作為局部循環(huán)變量。

建議3.7 不建議使用匈牙利命名法。

說明:變量命名需要說明的是變量的含義,而不是變量的類型。在變量命名前增加類型說明,反而降低了變量的可讀性;更麻煩的問題是,如果修改了變量的類型定義,那么所有使用該變量的地方都需要修改。

建議3.8 使用名詞或者形容詞+名詞方式命名變量。

建議3.9 函數命名應以函數要執(zhí)行的動作命名,一般采用動詞或者動詞+名詞的結構。

建議3.10 函數指針除了前綴,其他按照函數的命名規(guī)則命名。

規(guī)則3.5 對于數值或者字符串等等常量的定義,建議采用全大寫字母,單詞之間加下劃線?_?的方式命名(枚舉同樣建議使用此方式定義)。

規(guī)則3.6 除了頭文件或編譯開關等特殊標識定義,宏定義不能使用下劃線?_?開頭和結尾。

四、變量

原則4.1 一個變量只有一個功能,不能把一個變量用作多種用途。

原則4.2 結構功能單一;不要設計面面俱到的數據結構。

原則4.3 不用或者少用全局變量。

規(guī)則4.1 防止局部變量與全局變量同名。

規(guī)則4.2 通訊過程中使用的結構,必須注意字節(jié)序。

規(guī)則4.3 嚴禁使用未經初始化的變量作為右值。

建議4.1 構造僅有一個模塊或函數可以修改、創(chuàng)建,而其余有關模塊或函數只訪問的全局變量,防止多個不同模塊或函數都可以修改、創(chuàng)建同一全局變量的現象。

建議4.2 使用面向接口編程思想,通過API訪問數據:如果本模塊的數據需要對外部模塊開放,應提供接口函數來設置、獲取,同時注意全局數據的訪問互斥。

建議4.3 在首次使用前初始化變量,初始化的地方離使用的地方越近越好。

建議4.4 明確全局變量的初始化順序,避免跨模塊的初始化依賴。

說明:系統(tǒng)啟動階段,使用全局變量前,要考慮到該全局變量在什么時候初始化,使用全局變量和初始化全局變量,兩者之間的時序關系,誰先誰后,一定要分析清楚,不然后果往往是低級而又災難性的。

建議4.5 盡量減少沒有必要的數據類型默認轉換與強制轉換。

說明:當進行數據類型強制轉換時,其數據的意義、轉換后的取值等都有可能發(fā)生變化,而這些細節(jié)若考慮不周,就很有可能留下隱患。

五、 宏、常量

規(guī)則5.1 用宏定義表達式時,要使用完備的括號。

說明:因為宏只是簡單的代碼替換,不會像函數一樣先將參數計算后,再傳遞。

規(guī)則5.2 將宏所定義的多條表達式放在大括號中。

說明:更好的方法是多條語句寫成do while(0)的方式。

規(guī)則5.3 使用宏時,不允許參數發(fā)生變化。

規(guī)則5.4 不允許直接使用魔鬼數字。

說明:使用魔鬼數字的弊端:代碼難以理解;如果一個有含義的數字多處使用,一旦需要修改這個數值,代價慘重。使用明確的物理狀態(tài)或物理意義的名稱能增加信息,并能提供單一的維護點。

建議5.1 除非必要,應盡可能使用函數代替宏。

說明:宏對比函數,有一些明顯的缺點:宏缺乏類型檢查,不如函數調用檢查嚴格。

建議5.2 常量建議使用const定義代替宏。

建議5.3 宏定義中盡量不使用return、goto、continue、break等改變程序流程的語句。

六、質量保證

原則6.1 代碼質量保證優(yōu)先原則

(1)正確性,指程序要實現設計要求的功能。

(2)簡潔性,指程序易于理解并且易于實現。

(3)可維護性,指程序被修改的能力,包括糾錯、改進、新需求或功能規(guī)格變化的適應能力。

(4)可靠性,指程序在給定時間間隔和環(huán)境條件下,按設計要求成功運行程序的概率。

(5)代碼可測試性,指軟件發(fā)現故障并隔離、定位故障的能力,以及在一定的時間和成本前提下,進行測試設計、測試執(zhí)行的能力。

(6)代碼性能高效,指是盡可能少地占用系統(tǒng)資源,包括內存和執(zhí)行時間。

(7)可移植性,指為了在原來設計的特定環(huán)境之外運行,對系統(tǒng)進行修改的能力。

(8)個人表達方式/個人方便性,指個人編程習慣。

原則6.2 要時刻注意易混淆的操作符。比如說一些符號特性、計算優(yōu)先級。

原則6.3 必須了解編譯系統(tǒng)的內存分配方式,特別是編譯系統(tǒng)對不同類型的變量的內存分配規(guī)則,如局部變量在何處分配、靜態(tài)變量在何處分配等。

原則6.4 不僅關注接口,同樣要關注實現。

說明:這個原則看似和“面向接口”編程思想相悖,但是實現往往會影響接口,函數所能實現的功能,除了和調用者傳遞的參數相關,往往還受制于其他隱含約束,如:物理內存的限制,網絡狀況,具體看“抽象漏洞原則”。

規(guī)則6.1 禁止內存操作越界。

堅持下列措施可以避免內存越界:

  • 數組的大小要考慮最大情況,避免數組分配空間不夠。
  • 避免使用危險函數sprintf /vsprintf/strcpy/strcat/gets操作字符串,使用相對安全的函數snprintf/strncpy/strncat/fgets代替。
  • 使用memcpy/memset時一定要確保長度不要越界
  • 字符串考慮最后的’\0’, 確保所有字符串是以’\0’結束
  • 指針加減操作時,考慮指針類型長度
  • 數組下標進行檢查
  • 使用時sizeof或者strlen計算結構/字符串長度,,避免手工計算

堅持下列措施可以避免內存泄漏:

  • 異常出口處檢查內存、定時器/文件句柄/Socket/隊列/信號量/GUI等資源是否全部釋放
  • 刪除結構指針時,必須從底層向上層順序刪除
  • 使用指針數組時,確保在釋放數組時,數組中的每個元素指針是否已經提前被釋放了
  • 避免重復分配內存
  • 小心使用有return、break語句的宏,確保前面資源已經釋放
  • 檢查隊列中每個成員是否釋放

規(guī)則6.3 禁止引用已經釋放的內存空間。

  • 堅持下列措施可以避免引用已經釋放的內存空間:
  • 內存釋放后,把指針置為NULL;使用內存指針前進行非空判斷。
  • 耦合度較強的模塊互相調用時,一定要仔細考慮其調用關系,防止已經刪除的對象被再次使用。
  • 避免操作已發(fā)送消息的內存。
  • 自動存儲對象的地址不應賦值給其他的在第一個對象已經停止存在后仍然保持的對象(具有更大作用域的對象或者靜態(tài)對象或者從一個函數返回的對象)

規(guī)則6.4 編程時,要防止差1錯誤。

說明:此類錯誤一般是由于把“<=”誤寫成“<”或“>=”誤寫成“>”等造成的,由此引起的后果,很多情況下是很嚴重的,所以編程時,一定要在這些地方小心。當編完程序后,應對這些操作符進行徹底檢查。使用變量時要注意其邊界值的情況。

建議6.1 函數中分配的內存,在函數退出之前要釋放。

說明:有很多函數申請內存,,保存在數據結構中,要在申請?zhí)幖由献⑨專f明在何處釋放。

建議6.2 if語句盡量加上else分支,對沒有else分支的語句要小心對待。

建議6.3 不要濫用goto語句。

說明:goto語句會破壞程序的結構性,所以除非確實需要,最好不使用goto語句。

建議6.4 時刻注意表達式是否會上溢、下溢。

七、 程序效率

原則7.1 在保證軟件系統(tǒng)的正確性、簡潔、可維護性、可靠性及可測性的前提下,提高代碼效率。

原則7.2 通過對數據結構、程序算法的優(yōu)化來提高效率。

建議7.1 將不變條件的計算移到循環(huán)體外。

建議7.2 對于多維大數組,避免來回跳躍式訪問數組成員。

建議7.3 創(chuàng)建資源庫,以減少分配對象的開銷。

建議7.4 將多次被調用的 “小函數”改為inline函數或者宏實現。

八、 注釋

原則8.1 優(yōu)秀的代碼可以自我解釋,不通過注釋即可輕易讀懂。

說明:優(yōu)秀的代碼不寫注釋也可輕易讀懂,注釋無法把糟糕的代碼變好,需要很多注釋來解釋的代碼往往存在壞味道,需要重構。

原則8.2 注釋的內容要清楚、明了,含義準確,防止注釋二義性。

原則8.3 在代碼的功能、意圖層次上進行注釋,即注釋解釋代碼難以直接表達的意圖,而不是重復描述代碼。

規(guī)則8.1 修改代碼時,維護代碼周邊的所有注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪除。

規(guī)則8.2 文件頭部應進行注釋,注釋必須列出:版權說明、版本號、生成日期、作者姓名、工號、內容、功能說明、與其它文件的關系、修改日志等,頭文件的注釋中還應有函數功能簡要說明。

規(guī)則8.3 函數聲明處注釋描述函數功能、性能及用法,包括輸入和輸出參數、函數返回值、可重入的要求等;定義處詳細描述函數功能和實現要點,如實現的簡要步驟、實現的理由、設計約束等。

規(guī)則8.4 全局變量要有較詳細的注釋,包括對其功能、取值范圍以及存取時注意事項等的說明。

規(guī)則8.5 注釋應放在其代碼上方相鄰位置或右方,不可放在下面。如放于上方則需與其上面的代碼用空行隔開,且與下方代碼縮進相同。

規(guī)則8.6 對于switch語句下的case語句,如果因為特殊情況需要處理完一個case后進入下一個case處理,必須在該case語句處理完、下一個case語句前加上明確的注釋。

規(guī)則8.7 避免在注釋中使用縮寫,除非是業(yè)界通用或子系統(tǒng)內標準化的縮寫。

規(guī)則8.8 同一產品或項目組統(tǒng)一注釋風格。

建議8.1 避免在一行代碼或表達式的中間插入注釋。

建議8.2 注釋應考慮程序易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除非能用非常流利準確的英文表達。對于有外籍員工的,由產品確定注釋語言。

建議8.3 文件頭、函數頭、全局常量變量、類型定義的注釋格式采用工具可識別的格式。

說明:采用工具可識別的注釋格式,例如doxygen格式,方便工具導出注釋形成幫助文檔。

九、 排版與格式

規(guī)則9.1 程序塊采用縮進風格編寫,每級縮進為4個空格。

說明:當前各種編輯器/IDE都支持TAB鍵自動轉空格輸入,需要打開相關功能并設置相關功能。編輯器/IDE如果有顯示TAB的功能也應該打開,方便及時糾正輸入錯誤。

規(guī)則9.2 相對獨立的程序塊之間、變量說明之后必須加空行。

規(guī)則9.3 一條語句不能過長,如不能拆分需要分行寫。一行到底多少字符換行比較合適,產品可以自行確定。

換行時有如下建議:

  • 換行時要增加一級縮進,使代碼可讀性更好;
  • 低優(yōu)先級操作符處劃分新行;換行時操作符應該也放下來,放在新行首;
  • 換行時建議一個完整的語句放在一行,不要根據字符數斷行

規(guī)則9.4 多個短語句(包括賦值語句)不允許寫在同一行內,即一行只寫一條語句。

規(guī)則9.5 if、for、do、while、case、switch、default等語句獨占一行。

規(guī)則9.6 在兩個以上的關鍵字、變量、常量進行對等操作時,它們之間的操作符之前、之后或者前后要加空格;進行非對等操作時,如果是關系密切的立即操作符(如->),后不應加空格。

建議9.1 注釋符(包括?/??//??/?)與注釋內容之間要用一個空格進行分隔。

建議9.2 源程序中關系較為緊密的代碼應盡可能相鄰。

十、 表達式

規(guī)則10.1 表達式的值在標準所允許的任何運算次序下都應該是相同的。

建議10.1 函數調用不要作為另一個函數的參數使用,否則對于代碼的調試、閱讀都不利。

建議10.2 賦值語句不要寫在if等語句中,或者作為函數的參數使用。

建議10.3 賦值操作符不能使用在產生布爾值的表達式上。

十一、 代碼編輯、編譯

規(guī)則11.1 使用編譯器的最高告警級別,理解所有的告警,通過修改代碼而不是降低告警級別來消除所有告警。

規(guī)則11.2 在產品軟件(項目組)中,要統(tǒng)一編譯開關、靜態(tài)檢查選項以及相應告警清除策略。

規(guī)則11.3 本地構建工具(如PC-Lint)的配置應該和持續(xù)集成的一致。

規(guī)則11.4 使用版本控制(配置管理)系統(tǒng),及時簽入通過本地構建的代碼,確保簽入的代碼不會影響構建成功。

建議11.1 要小心地使用編輯器提供的塊拷貝功能編程。

十二、 可測性

原則12.1 模塊劃分清晰,接口明確,耦合性小,有明確輸入和輸出,否則單元測試實施困難。

說明:單元測試實施依賴于:

  • 模塊間的接口定義清楚、完整、穩(wěn)定;
  • 模塊功能的有明確的驗收條件(包括:預置條件、輸入和預期結果);
  • 模塊內部的關鍵狀態(tài)和關鍵數據可以查詢,可以修改;
  • 模塊原子功能的入口唯一;
  • 模塊原子功能的出口唯一;
  • 依賴集中處理:和模塊相關的全局變量盡量的少,或者采用某種封裝形式。

規(guī)則12.1 在同一項目組或產品組內,要有一套統(tǒng)一的為集成測試與系統(tǒng)聯調準備的調測開關及相應打印函數,并且要有詳細的說明。

規(guī)則12.2 在同一項目組或產品組內,調測打印的日志要有統(tǒng)一的規(guī)定。

說明:統(tǒng)一的調測日志記錄便于集成測試,具體包括:

  • 統(tǒng)一的日志分類以及日志級別;
  • 通過命令行、網管等方式可以配置和改變日志輸出的內容和格式;
  • 在關鍵分支要記錄日志,日志建議不要記錄在原子函數中,否則難以定位;
  • 調試日志記錄的內容需要包括文件名/模塊名、代碼行號、函數名、被調用函數名、錯誤碼、錯誤發(fā)生的環(huán)境等。

規(guī)則12.3 使用斷言記錄內部假設。

規(guī)則12.4 不能用斷言來檢查運行時錯誤。

說明:斷言是用來處理內部編程或設計是否符合假設;不能處理對于可能會發(fā)生的且必須處理的情況要寫防錯程序,而不是斷言。如某模塊收到其它模塊或鏈路上的消息后,要對消息的合理性進行檢查,此過程為正常的錯誤檢查,不能用斷言來實現。

建議12.1 為單元測試和系統(tǒng)故障注入測試準備好方法和通道。

十三、 安全性

原則13.1 對用戶輸入進行檢查。

說明:不能假定用戶輸入都是合法的,因為難以保證不存在惡意用戶,即使是合法用戶也可能由于誤用誤操作而產生非法輸入。用戶輸入通常需要經過檢驗以保證安全,特別是以下場景:

  • 用戶輸入作為循環(huán)條件
  • 用戶輸入作為數組下標
  • 用戶輸入作為內存分配的尺寸參數
  • 用戶輸入作為格式化字符串
  • 用戶輸入作為業(yè)務數據(如作為命令執(zhí)行參數、拼裝sql語句、以特定格式持久化)

這些情況下如果不對用戶數據做合法性驗證,很可能導致DOS、內存越界、格式化字符串漏洞、命令注入、SQL注入、緩沖區(qū)溢出、數據破壞等問題。

可采取以下措施對用戶輸入檢查:

  • 用戶輸入作為數值的,做數值范圍檢查
  • 用戶輸入是字符串的,檢查字符串長度
  • 用戶輸入作為格式化字符串的,檢查關鍵字“%”
  • 用戶輸入作為業(yè)務數據,對關鍵字進行檢查、轉義

規(guī)則13.1 確保所有字符串是以NULL結束。

說明: C語言中?\0?作為字符串的結束符,即NULL結束符。標準字符串處理函數(如strcpy()、 strlen())

依賴NULL結束符來確定字符串的長度。沒有正確使用NULL結束字符串會導致緩沖區(qū)溢出和其它未定義的行為。

為了避免緩沖區(qū)溢出,常常會用相對安全的限制字符數量的字符串操作函數代替一些危險函數。如:

  • 用strncpy()代替strcpy()
  • 用strncat()代替strcat()
  • 用snprintf()代替sprintf()
  • 用fgets()代替gets()

這些函數會截斷超出指定限制的字符串,但是要注意它們并不能保證目標字符串總是以NULL結尾。如果源字符串的前n個字符中不存在NULL字符,目標字符串就不是以NULL結尾。

規(guī)則13.2 不要將邊界不明確的字符串寫到固定長度的數組中。

說明:邊界不明確的字符串(如來自gets()、getenv()、scanf()的字符串),長度可能大于目標數組長度,直接拷貝到固定長度的數組中容易導致緩沖區(qū)溢出。

規(guī)則13.3 避免整數溢出。

說明:當一個整數被增加超過其最大值時會發(fā)生整數上溢,被減小小于其最小值時會發(fā)生整數下溢。帶符號和無符號的數都有可能發(fā)生溢出。

規(guī)則13.4 避免符號錯誤。

說明:有時從帶符號整型轉換到無符號整型會發(fā)生符號錯誤,符號錯誤并不丟失數據,但數據失去了原來的含義。

帶符號整型轉換到無符號整型,最高位(high-order bit)會喪失其作為符號位的功能。如果該帶符號整數的值非負,那么轉換后值不變;如果該帶符號整數的值為負,那么轉換后的結果通常是一個非常大的正數。

規(guī)則13.5:避免截斷錯誤。

說明:將一個較大整型轉換為較小整型,并且該數的原值超出較小類型的表示范圍,就會發(fā)生截斷錯誤,原值的低位被保留而高位被丟棄。截斷錯誤會引起數據丟失。使用截斷后的變量進行內存操作,很可能會引發(fā)問題。

規(guī)則13.6:確保格式字符和參數匹配。

說明:使用格式化字符串應該小心,確保格式字符和參數之間的匹配,保留數量和數據類型。格式字符和參數之間的不匹配會導致未定義的行為。大多數情況下,不正確的格式化字符串會導致程序異常終止。

規(guī)則13.7 避免將用戶輸入作為格式化字符串的一部分或者全部。

說明:調用格式化I/O函數時,不要直接或者間接將用戶輸入作為格式化字符串的一部分或者全部。攻擊者對一個格式化字符串擁有部分或完全控制,存在以下風險:進程崩潰、查看棧的內容、改寫內存、甚至執(zhí)行任意代碼。

規(guī)則13.8 避免使用strlen()計算二進制數據的長度。

說明:strlen()函數用于計算字符串的長度,它返回字符串中第一個NULL結束符之前的字符的數量。因此用strlen()處理文件I/O函數讀取的內容時要小心,因為這些內容可能是二進制也可能是文本。

規(guī)則13.9 使用int類型變量來接受字符I/O函數的返回值。

規(guī)則13.10 防止命令注入。

說明:C99函數system()通過調用一個系統(tǒng)定義的命令解析器(如UNIX的shell,Windows的CMD.exe)來執(zhí)行一個指定的程序/命令。類似的還有POSIX的函數popen()。

十四、 單元測試

規(guī)則14.1 在編寫代碼的同時,或者編寫代碼前,編寫單元測試用例驗證軟件設計/編碼的正確。

建議14.1 單元測試關注單元的行為而不是實現,避免針對函數的測試。

說明:應該將被測單元看做一個被測的整體,根據實際資源、進度和質量風險,權衡代碼覆蓋、打樁工作量、補充測試用例的難度、被測對象的穩(wěn)定程度等,一般情況下建議關注模塊/組件的測試,盡量避免針對函數的測試。盡管有時候單個用例只能專注于對某個具體函數的測試,但我們關注的應該是函數的行為而不是其具體實現細節(jié)。

十五、 可移植性

規(guī)則15.1 不能定義、重定義或取消定義標準庫/平臺中保留的標識符、宏和函數。

建議15.1 不使用與硬件或操作系統(tǒng)關系很大的語句,而使用建議的標準語句,以提高軟件的可移植性和可重用性。

建議15.2 除非為了滿足特殊需求,避免使用嵌入式匯編。

說明:程序中嵌入式匯編,一般都對可移植性有較大的影響。

本文來源網絡,免費傳達知識,版權歸原作者所有。如涉及作品版權問題,請聯系我進行刪除。

往期推薦

《嵌入式Linux驅動大全》

在公眾號聊天界面回復1024,可獲取嵌入式資源

嵌入式大雜燴 專注于嵌入式技術,包括但不限于C/C++、嵌入式、物聯網、Linux等編程學習筆記,同時,內包含大量的學習資源。歡迎關注,一同交流學習,共同進步!
評論
  • 在物聯網從“萬物互聯”邁向“萬物智聯”的進程中,LTE Cat.1憑借其在速率、成本與網絡覆蓋之間的完美平衡,正成為中低速物聯網市場的絕對主力。隨著2G/3G網絡的逐步退網以及新國標對終端設備智能化、定位功能的強制要求,Cat.1模組迎來了爆發(fā)式的增長窗口。在這一關鍵節(jié)點,基于華為海思Hi2131芯片設計的LTE Cat.1模組,憑借其在能效、射頻、架構及物理規(guī)格上的底層創(chuàng)新,成功打破了“高性能必高功耗”的傳統(tǒng)魔咒,為行業(yè)提供了極具競爭力的連接最優(yōu)解。核心技術優(yōu)勢:重塑Cat.1能效與連接標桿海
    用戶1778981989717 2026-08-05 21:04 199瀏覽
  • 導語在現代高速數字電路設計中,信號的完整性已不僅是理想波形推演,而是一場與物理非理想特性正面博弈的工程實踐。濾波器芯片作為凈化傳輸鏈路的關鍵屏障,其核心挑戰(zhàn)在于:能否有效識別并濾除那些隱匿在電平跳變過程中的亞納秒級瞬態(tài)脈沖干擾,這類干擾持續(xù)極短,卻足以在高速鏈路中引發(fā)誤觸發(fā)。然而,傳統(tǒng)函數發(fā)生器受限于采樣率與邊沿速率,根本無法忠實復現如此狹窄且陡峭的異常波形。針對此困境,德思特TS-AWG7000系列任意波形發(fā)生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態(tài)脈沖提供精細刻畫,配合SPG
    德思特測試測量 2026-08-05 14:06 5瀏覽
  • 一、方案簡介在Buildroot構建的嵌入式Linux系統(tǒng)中部署Flutter應用,主流有兩套成熟的開源方案,分別適配不同的顯示場景與開發(fā)需求:方案一:flutter-elinux(Sony開源方案)由索尼官方維護的嵌入式Linux Flutter工具鏈,既支持DRM/GBM直接渲染,也兼容Wayland、X11等多種顯示后端,場景適配性更廣。方案二:flutter-pi(輕量級嵌入器)一款輕量級Flutter引擎宿主程序,僅基于底層DRM/GBM接口實現渲染,無需依賴桌面環(huán)境,資源占用更低,更
    飛凌嵌入式 2026-08-07 09:34 150瀏覽
  • 讓微弱脈沖信號更清晰——鎖相放大器集成Boxcar平均器在脈沖激光、泵浦-探測、時間分辨光譜、飛行時間質譜等實驗中,真正需要測量的信號往往只出現在一個很短的時間窗口內,卻被淹沒在遠大于它的噪聲和背景之中。 針對這類穩(wěn)定重復的微弱脈沖與瞬態(tài)信號,賽恩科儀為OE2052雙通道數字鎖相放大器帶來全新的Boxcar Averager功能升級:在鎖相檢測之外,進一步提供從周期波形觀察、門控測量到多周期平均的完整數字Boxcar測量鏈路。 Boxcar平均器,如何從噪聲中“截取”目標信號?Boxcar平均器
    SSI_賽恩科儀 2026-08-07 15:49 13511瀏覽
  • 摘要東莞市恒創(chuàng)連接器有限公司(HCHGCONN)是位于廣東東莞的連接器源頭制造工廠,專注于連接器國產替代、小間距大電流連接器、線對板連接器、線對線連接器、板對板連接器、電源連接器及定制連接器開發(fā)。公司面向工業(yè)自動化、新能源儲能、BMS、汽車電子、AI服務器、GPU供電、通信設備、醫(yī)療設備和智能家居等場景,提供從產品選型、替代評估、樣品驗證到批量交付的一站式連接方案。恒創(chuàng)可支持 Molex、TE Connectivity、JST、Hirose、Samtec 等國際品牌部分系列的國產替代評估。常見替
    HC003 2026-08-07 10:14 155瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩(wěn)定起振的成品,要經過十幾道精密工序。它內部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個生產過程里哪怕0.1微米的誤差,都會直接廢掉整批產品,這也是小尺寸晶振過去長期依賴進口,國內廠商花了十幾年才啃下量產硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 512瀏覽
  • 做藍牙音箱的工程師大概都碰過這個局面。產品要連手機放歌,要本地播開機提示音和按鍵音,還要接 App 做配網和狀態(tài)上報。三件事拆開,早先的常規(guī)做法是音頻藍牙一顆料、數傳藍牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍牙、BLE 數傳和 MP3 本地播放三樣全包了。對藍牙音箱來說,最實在的好處就
    唯創(chuàng)知音語音芯片 2026-08-06 15:14 360瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 212432瀏覽
  • 樓宇自控里的“巴別塔”一棟智慧樓宇、一個產業(yè)園區(qū)里,暖通空調運行著廠商私有協議,照明系統(tǒng)遵循專屬通信標準,變配電、門禁安防各成體系——設備間數據壁壘森嚴,上位平臺對接全靠定制化 “翻譯” 開發(fā),不僅成本高企,交付周期也難以管控。這就是樓宇自控行業(yè)多年的痛點:協議林立、封閉林立。而破局的鑰匙,早在30多年前就已經寫好了——BACnet。作為ASHRAE制定的樓宇自控國際標準協議,BACnet是如今全球樓宇自控系統(tǒng)(BAS)互聯互通的“通用語言”。新風機、冷源群控、變配電、照明、門禁,凡是需要被樓宇
    飛凌嵌入式 2026-08-10 09:26 193瀏覽
  • 產品使用18V供電,配套4串鋰離子電池,需要設計一個充電器。因為輸入18V,電池最高 16.8V,壓差僅 1.2V。因為壓差太小。使用開關型的充電控制芯片不穩(wěn)定。嘗試自行設計一個。整體采用分立三極管 + TL431架構,分4個功能單元:使能控制回路、限流環(huán)路、TL431 精密恒壓反饋環(huán)路、PNP 功率管主功率輸出回路;實現完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經 R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導通,對地拉低 R1、R2 組成的分壓控制節(jié)點電位;該節(jié)點直
    southcreek 2026-08-07 13:45 468瀏覽
  • 做電池供電攝像頭、可視門鈴、戶外安防的同學應該都踩過這個坑:攝像頭要拍,ISP、sensor、無線模塊全得開著,整機電流動輒幾百 mA。一節(jié) 18650 撐不了幾天,用戶投訴“怎么又沒電了”。有人會說:加個 PIR 人體紅外不就行了?問題是 PIR 怕熱、怕寵物、怕隔著亞克力/玻璃殼,而且只能感知“有溫差的人體移動”,靈敏度飄忽。真正省電的思路應該是:讓攝像頭平時徹底睡死,只有“前面有人/有動靜”時才被一鍵喚醒——而負責這個“看門”角色的,最合適的是一顆低功耗雷達。一、為什么是雷達,而不是 PI
    唯創(chuàng)知音語音芯片 2026-08-07 14:44 168瀏覽
我要評論
0
點擊右上角,分享到朋友圈 我知道啦
請使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 神医弃女短剧全集| 五十公里桃花坞4免费观看完整版| 花姐的个人资料| 菠萝菠萝蜜免费播放| 请你原谅我分集剧情| 反叛的鲁路修在线观看| 《部长出差的日子》韩国| 天使的3d动漫| 超感警探第五季| 木下子檀檩子电影免费播放| 巴尔干边界完整免费观看| 《驯服小峓子》2在线| 三十五度灰| 朋友的妻子.| 逃学神探在线观看免费完整| 疯狂的兔子第二季| 按摩店的待遇1免费观看| 几度夕阳红剧情| 四少妇按摩记2| 唐老鸭和米老鼠全集| 幸福里九号| 《特殊的治疗》2李采潭中文| 影音先锋男人源资源| 特派外卖员视频| 邵氏电影大全国语版| 速度与激情5完整版| 坎贝奇《品味人生》播放电影完整版 | 女战狼6免费高清版| 寒战2电影| 春光乍泄 电影| 钢铁侠真的可以存在吗| 旋风管家 电视剧| 美容院特殊待遇4| 幸福触手可及| 妈妈的职业2观看全集免费高清中文| 酷龙组合| 请回答1988在线观看| 白峰电影在线播放免费版| 无敌风火轮在线观看| 三年大片在线观看免费观看国语完整版| 汽车总动员国语版下载| 花样系鞋带| 法律与秩序特殊受害者| 给女儿播种在线观看| 铿锵锵锵锵免费下载完整版| 华丽的诱惑| 趟过男人河的女人电视连续剧| 想要电影网| 薛佳凝淡出娱乐圈的原因| 女超人满天星无删减麦乐迪版种子| 高清《刑事侦缉档案2》电视剧| 爱丫爱丫影院最新电视剧免费观看| 绀青之拳完整免费观看| 变形金刚7| 爱我几何原版无删减版观看| 吵闹的邻居| 也平凡在哪个软件上看| 猎金游戏电影免费观看完整版| 金蝉脱壳电影| 做aj视频电视剧大全| 雯雅婷2| 混血大学生精油按摩伦理在线| 爱欲告白完整版韩剧免费| 《女友年轻的妈妈》中字头歌词| 女子修道院6满天星版| 德克里克堡| 《授课到天亮》动漫免费观看全集| 《总统夫人》(罗丽·星克莱尔)| 女人是男的人未来1分54| 最美的时光番外二| 美国特别酒店3| 可爱的妹妹| 82板杨敏思版本1-5电视剧免费观看就是 | 电影玉女心经3:阴阳和合| 监狱不设防百度影音| 曼乐迪女超人在线看| 地心引力2神秘岛| 一元包邮| 美国禁忌11| 爱情公寓3第2集| 非你莫属泰剧在线观看| 蜗居电视剧35剧情全集在线观看| 战狼6高清在线观看| 宝宝怎么那么湿| 康熙来了青峰| 3d柔铺团2电影完整版| 绝代双骄林志颖版| 意大利版泰山hr版| 最新韩剧电视剧| 浮世双娇传电视剧免费观看| 光战队覆面人国语版| 斗罗大陆148集| 后院露营第一季未增减 0.0| 私密肥大| 《品味人生》全集免费看| 贴身情人之贴身恋| 凤与朝电视剧免费观看| 女拳击手满天星免费播放| 我在大学修文物未删减| 雅帕菲卡| 动漫《花嫁高柳家》在线观看 | 张磊中国好声音| 大唐荣耀在哪个平台看| 儿子爱上日本妈妈叫什么电影| 少年包青天2部| 麦乐迪《家庭矛盾》免费观| 安娜情欲史2| 二人转正戏包公吊孝| 女保镖电视剧| 快乐的大脚百度影音| 法国空乘4免费高清原声满天星美版百度 | 年轻的小婊一级A片国产| 人鱼小姐全集| 珠帘玉幕电视剧免费观看| 美味儿女息小玲第九章| 绽放的许开心在线观看免费完整版| xl司令第二季马赛免费观看高清动漫| 宦海奇官| 双乳丰满的女学生电影| 电影战马| 《花子vs倔强驱魔师》免费观看全集 | 一念永恒187| 生存之民工| 名侦探柯南722| 风云2全集| 周弘版《村枝》完整| 堀北真希电影| 朱莉安妮监狱的电影叫什么名字来着 | 男生女生一起愁愁愁愁愁电视剧在线观看 | 断案追凶超神:女法医古代全集免费| 百万英镑电影| 春晚贺电| 荒岛女儿国满天星版| 盲战在线观看免费| 《巨乳按摩》91传媒| 女子推理社第二季| 鸭王2百度云| 辣椒教室| 未来之翼| 苹果电影完整版视观看| 搞笑一家人韩国版全集| 《和讨厌的部长出差旅》 | 白日梦奇遇记| 煮妇神探| 仙剑2电视剧| 出国| 罗刹海市被央视点名| 爱我几何电影在线观看| 娃娃解说| 《法国空乘11》播放了几集| 绿皮书免费| 十九岁中国高清免费版爱奇艺| 微笑pasta全集| 火柴人格斗动画| 女友成双| 成龙历险记第5部| 杨思敏 金瓶梅| 创造营2020| 电影《美容院的特殊待遇》| 刘敏涛主演的黑蝴蝶在线播放 | 李丽莎无圣光原图| 一念永恒动漫免费观看| 原振侠全集| 绅士布朗科| 深空动漫在线观看| 荒野求生贝尔 格里尔斯| 法版高压监狱2小时45分| 笑咏春粤语| 越南《性的暴行》电影 | 坎贝奇拍的电影《无憾》在线观看 | 凶宅处理专员在线全集观看| 女销售员的秘密 在线| 无间电视剧在线观看免费版完整| 肆一的生活记录最新视频| 冰封侠 重生之门| 等着你回来粤语| 空间神医农女:医术惊天下全集免费 | 五亿探长雷洛传1粤语版免费观看| 电影《生活中的玛丽》免费播放导演| 豪门弃少全集免费| 同学的妈妈电影| 魔鬼女集中营| 欧美女人ooozzzxxx | 欧少女40集全| 老公我要电影免费观看| yellow高清视频在线| 延禧攻略70集免费播放完整版| 白峰电影在线播放免费版最新章节美 | 销售员秘密| 满清十大刑酷翁虹版| 金银悔1-5HD普通话| 沉默羔羊| 分歧4麦乐迪| 三傻大闹宝莱坞电影| v酒店在线观看第一季 | 1-5普通话版免费播放| 年轻的妹妹| 和讨厌的上司出差 在线| 遇见你之前| 骄阳似我1-36集电视剧| 富江动画12集| 再来一次吧| 爱在生死边缘| 乌海在线| 茅坑里的僵尸完整版| 和讨厌的部长一起去出差旅电影在线观看 | 金瓶梅高清全集| 食尸鬼第二季| 冰与火电视剧免费全集观看| 秦雪梅哭灵| 丰满退休阿免费播放电视剧| 插曲的痛30集全免费观看第二部 | yellow视频高清免费| 永不磨灭的番号33| 要爸爸播种2演员全集资源| 天宇一号| 《爱我几何》免费版| 《蛟龙行动》在线观看高清电影 | 宋小宝2022年最新小品| 脱狱者侵犯排卵期人妻| 短剧蛇园全集免费播放| 墨西哥电视剧《la rosa de guadalupe》(瓜达卢佩的玫瑰/奇迹玫瑰),熟女名字叫 | 枞阳县| 卑劣的街头国语| 在线下象棋在线玩| 消失的她在线| 插曲的痛第60集全集在线播放免费观看 | 谢娜官方工作室发文道歉| 182822282午夜寂寞影院| 樱兰高校男公关部真人版| 张警官第二集在线| 禁忌5完整版在线看中文| 卖百科全书的人未删减版叫什么名字| 暮光之城4下| 维修工的老艳遇在线观看 | 温泉艳遇| 圣域传说| 木下檩檩子的电影全集| 镜双城电视剧在线观看| 暴躁老妈全集免费观看| 飞刀问情电视剧免费观看| 克莱尔迷宫在线观看| 楼下的租客| 杨敏版1-5集在线观看电视剧| 《禁忌》1无删减| 小蜜桃五| 巨人最终季PART3在线观看| 需要爸爸的种子中文| 奥巴马白宫记者晚宴| 关于卖房女的三级片| 风起的日子笑看落花| 变脸的原理| WRITEAS幼童| 美国电影《需要爸爸播种2》在线观看| 给我完整版在线观看| 混血女大学生私密按摩电影免费| 梅山奇案| 玛丽萨科满天星原版| 《亲爱的客栈2026》| 韩国漂亮的小瘦子8| 恋夜秀手机视频uc| 训服的小 子2| 阴阳少女:见鬼捉鬼全集免费| 年轻的瘦了5| 仁心解码| 蒋玲玲版《渔夫的荒野史记》完整版| 电视剧海上繁花免费观看| 《小小诊所》完整版免费观看| 神女峰的迷雾| 铿铿铿锵锵锵锵免费观看| 作家的谎言的电影| 法国私人助理1982年| 女世子电视连续剧免费观看| 法国《荣誉守则》免费观看| 高清《美景之屋1》| 克罗斯凯登电影合集| 恶作剧之吻续集| 圣天门口| 看了又看电视剧国语版韩剧网| 非常人贩2在线观看| 高清《仙逆剧场版 神临之战》电影 | 《女超人满天星版》免费观看| 凶猛的办公室日本动漫电影 | 皖宿小哥有声小说| 姜汉娜朋友2| 《德国空乘4》| 双子公主第一部| 范建明李婧婧小说免费阅读在线| 电视剧好好过日子| 放荡邻居尤物少妇在线观看| 在一声声姐姐中迷失自我 | 最强大脑何猷君| 私人航空2高清在线观看| 脾虚嘴唇有什么症状| 酒店1-5集全集| 辽沈战役高清| 云和县| 朋友的妈妈2在钱| 飞行家下载| 荆轲刺秦王电影| 法国版《俄罗斯女子学院》| 挚爱游戏短剧免费观看| 迅雷电影网| 吞噬星空104| 极乐麻将| 插曲的痛第9集免费资源 | 龙过鸡年| 飞哥大英雄电视剧全集在线观看| 韩国mama颁奖礼| 辣妞范儿| 泰国暴躁少女航母电影| 伊人网站在线观看| 大江大河3免费观看下载| 未婚妻电视剧全集| 《21世纪爱情指南》免费观看中文版| 哪吒降妖记电视剧| 女超人麦乐迪无删减在线观看| 我是一名教师电影完整版| 荔波县| 莲花楼 电视剧| 我是你儿媳韩剧| 女特务穿旗袍用美人计电视剧| 城市猎人动漫中文版| 妈妈的职业免费观点看| 电影《孟良崮》| 朋友的女朋友在线观看| 泰剧是你| 空蝉之森原版完整版网盘| 二十四道拐| 大学生第四季| 欢乐颂第一季免费观看| 男得有爱电影完整版| 19岁免费观看完整版高清韩剧| 好大灬好硬灬好爽灬无码日本| 火影忍者疾风传383| 想要的一天酷客| 战狼6欧式少女全集资源百度云| 勇往直前20100516| 《蓝色隐形帽子完整版| 计春华简介| 出差被最讨厌的人欺负用药电影免费 | 爱人免费收看| 热带雨电影完整版| 经山历海| 神武天尊在线观看| 三年中文免费播放观看 | 致哀和志哀意思区别| 倔强驱魔师1-4集免费动漫在线观看樱| 机动战士高达水星的魔女2022| 小凤新婚下集全集在线观看| 我们的爱情有点疯狂| 美国女儿要爸爸播种电视剧马| 电视剧名校| 小心肝儿美国电影免费观看完整版 | 和讨厌的部长一起出差日本电影| 火龙对决| 解忧公主电视剧全集| 幸福到万家在线观看全集| 给我免费观看片在线电影的| jjzz日本18| 上流社会韩剧电影完整版免费观看| 赤板栗电影完整版| 无赖勇者的鬼畜美学| 日本年轻丰满的继牳2| 超级变变变中文版全集| 激战酒店1-80集电视剧免费播放下载| 田伟积水潭医院院长最新消息| 新结婚时代在线观看| 九州短剧| 五十度灰免费观看全集高清版| 关于我转生变成史莱姆这档事| 法国电影法国空姐4 | 东京塔越南女子别动队在线观看完整视频| 电影《红色角落》完整版免费观看| 好姑娘1第二部免费观看| 团圆饭电视剧全集| 《北越暴行》3| 洪熙官电视剧| 了不起的菲丽西高清电影免费完整版| 传家电视剧免费观看| 古玩捡漏:我是捡漏小能手全集免费| 郝板栗千金小姐在线观看| star 444| 日本差旅电影| 萨米大冒险2电影| 女超人 麦乐迪| 无双国士| 九重紫连续剧| 法国电影《女流氓》的剧情简介 | 小两口免费观看全集| 千山暮雪17| 新金瓶梅快播| 铿钢锵锵锵锵锵好多少视频 | 木下檀檩子免费看全集| 关中往事| 我需要爸爸播种| 新水浒传24集| 灯草和尚qvod| 绝密暗号电视剧在线观看免费版高清| 我的幸福婚约电影| 被公公操怀孕白峰美羽在线免费观看| 心灵捕手 电影| 美式保罗1至4带中文| 漂亮的保姆韩国高清| 马达加斯加3插曲| 用身体偿还客户社长| 汽车旅馆| 别墅轮换5攻略免费| 庖丁解牛朗读| 洪湖赤卫队电视剧| 西城男孩最好听的歌| 性感海滩3丝袜补丁| 女超人麦乐迪在线播放完整版电影| 爱情电影网站apdy香织| 北条麻妃熟女在线观看AV| xl司令第一季全集在线观看完整版 | 老公的家庭教师在线观看| 天星术之欧美高清视频完整播放 | 金瓶少女| 《羔羊》舒淇| 八尺夫人意大利原版在线| 巴厘岛的故事电视剧免费观看全集| 电视剧《薄冰》免费观看| 致我们单纯小美好| flowover在线观看完整| 毒医肥尸1999国语版| 失控谎言电影| 泰剧女奴| 美国禁忌7年转一代| 来自星星的你国语| 黑帮大佬和我的365天未删除版本 邻居也疯狂免费观看电视剧 | 许冠杰演唱会| 老和尚与小姑娘的人物性格| 美国A片巜禁忌5》偷欢| 缘之空 在线观看| 妻子秘密全集| 普罗米修斯高清| 变形金刚2国语版| 飞机上的性服务K8电影免费观看| 贴身保镖第一季完整版在线观看| 骄阳似我电视剧在线看| 高清《亮剑》电影| 奥尼尔名人堂演讲| 月里二嫂猪肉换米| 女主播的故事中文版| 大唐豪放女| 豚鼠总动员| 电视剧和平使命| 5帕克禁忌| 爱是一场在劫难逃短剧免费观看| 法国空姐5免费高清原声奔跑| 杀敌爆功力 我成武神小说| 七擒萌货| 落魄贵族琉璃川在线观看动漫免费| 我的三个朋友妻子| 舞蹈红月亮| 渔夫妻子意大利| 黑帮大佬和我的365五天| 《已婚妇女:天气炎热时》日剧| 爱你2025全集免费播放| 命运 电视剧| 妻子和上司出差住酒店怎么办 | 男排亚洲杯决赛直播| 行尸走肉大结局| 鲜花盛开的村庄电视剧| 欢乐颂5| 铜铿锵锵锵锵锵在线观看| 左宗棠电视剧20集全集免费观看| 日本电影部长来家喝酒| 回复术士的重启人生4集在线观看 抓娃娃免费观看完整版高清电影 天空之城钢琴曲教学 | 牙医姐妹赤子板栗无删减版电视剧 | 朴亚珍| 维纳斯vs魔人| 湖南下了特大暴雪| 《水润女人》| 高清岁月有情时| 刀马旦电影| 肯纳詹姆斯《空乘》| 亲密爱人韩国电影免费完整版| 远大前程2011| 森奈奈子在线| 仙帝奶爸:萌宝找妈咪短剧全集| 回复术士的重来人生免费播放 | 可怜武田全集免费播放| 禁止的爱善良的小蛦子 在钱| 新版娃娃脸9免费观看高清 | 高松惠理| 女子护卫队满天星1973剧情解析| 白日焰火无删减版在线观看| 乌克兰娃娃脸女孩| 带队横扫全球:电竞女王短剧全集| 姐姐的朋友免费看| 电影《无憾》免费观看| 鹿鼎记陈小春版免费国语在线观看 | 上海暗管漏水维修| 维修工的艳遇 中字| 修罗战神:谁敢动我家人全集免费| 唐人街探案3免费观看完整在线| 尔滨启动收复失地计划!| 新萧十一郎| 壮志凌云女版满天星法版免费2011美国| 交换上司的秘书免费看| 疯狂外星人免费观看完整版国语版 | 《杉杉来了》免费观看| 鸭王电影下载| 需要爸爸播种子美国电| 缘之空12| 《即兴卧底》| 战狼6免费完整电影在线观看高清视频软件下载 | 蛛丝马迹| 七时吉祥电视剧免费观看| 我是女演员| 姨妈2完整版免费观看| 空中酒店2014| 古惑仔之fing头妹| 《偷天盗日》| 总统夫人的夜晚在线观看全集| 幽灵计划在线观看| 都铎王朝第四季| 遥控器控制女老板的电影 | 钟馗抓妖记| 美国狂野满天星1980年| 法医秦明无声的证词| 特邀外卖员免费观看高清完整电影 | 战狼9加拿大版高清版 | 埃博拉病毒2| 骨王第一季免费观看完整版| 卧底2电视剧免费观看全集| 菠萝菠萝蜜电影免费| 电影 廊桥遗梦| 绿光森林全集| 你的名字在线观看免费高清完整版 | 年经母8| 最美的青春电视剧免费播放| 非洲人与性动交CCOO| 品味人生无憾在线观看| 棺姬嘉依卡| 一起愁愁愁在线观看免费高清 | 网络惊魂| 李彩谭的电影全集在线看| 雪中悍刀行电视剧上映| 需要爸爸的种子在线观看| 莫言作品丰乳肥臀| 新猫和老鼠全集| 美姊妹剥赤板栗| 蜜桃成熟33d高清| 偷窥邻居做爰2| 美国电影荷尔蒙6免费| 丁度开放的心| 绝密押运18| 韩剧办公室蓝色隐身帽子动漫| 青春荷尔蒙2 完整版| 中国商船在太平洋遇到祖国航母 | 甄嬛传舞蹈| 俄罗斯版《女儿国》| 韩国电影医生高清完整版在线观看| 暖暖的微笑在线观看| 快餐车免费| 生万物电视剧第15集| 日本战狼6免费国语| 电影《娜塔莉》在线观看完整版中文 | 浴血狂沙国语版下载| 电影邻居完整版| 金瓶梅电视剧全集电视剧 | 优秀女巫贾斗心| 韩国女主播朴妮唛kw7142| 第八个嫌疑人| 吉木乃县| 九重紫电视剧在线播放| 神犬奇兵| 女麦乐迪满天星版在线观看| 高清《情人》大尺度片段| 淮剧珍珠塔| 卖保险的女销售| 宄字怎么读| 初恋时间1到6集免费观看| tobu4第一次| 年下诱惑伴奏| 熊出没之夺宝熊兵电影| 满天星《炸天小姐》完整版在线观看 | 外来从业人员综合保险查询| 《被下药强辱的妻子》在线| 苗侨伟版楚留香| 少妇的诱惑免费观看完整版中文| 《驯服小峓子》中文| 一个人免费完整在线观看HD| 新乌龙院之笑闹江湖| 三对一韩国在线观看 | 长生界动漫在线观看全集免费高清| 赤坂丽《牙医诊所》在线观看免费 | 外出电影2| jizz日本在线观看| 好妈妈8| 无名之夜1~5集免费观看| 《法国空乘5》在线免费观看 | 变装俱乐部| 加勒比女海盗成版人2在线| 美味快递员2| 危险关系免费完整版观看| 向涟苍士献上纯洁未增删樱花| 日本修理工的艳遇| 小向まな美| 北大女生包里最全聊天记录| 我的好朋友瘦子4| 天龙八部钟汉良版43| 鬼哭狼嚎的意思| 凌云壮志(欧美)满天星法国版云盘| 覆面系男友| 郭德纲《济公传》| 一夜激情| 鬼灭之刃 锻刀村篇| 《动物园》| 马永贞之英雄血国语| 袁隆平来京领奖前快乐得像个孩子| 欧式少女18集全集在线看 | 吉普赛女王| omoflow第一季真人版| 热带雨在线观看完整版免费高清| 心慌方2| 美姐妹牙医在线电影观看完整版高清| 恋曲尘封| 出包王女第三季| 巨乳继拇做爰2| 薛平贵与王宝钏47| 天乩之白蛇传| 牙医姐妹在线看| 情挑六月花| 狂蟒之灾1| 四位大学位按摩记的背景和历史背景| 七日生电视剧全集免费播放| 韩国歌手张润贞| 校园法官越南剧免费观看| 《咒》在线观看2022| 动感之星 妖精 全集| 爱上老妈闺蜜免费观看电视剧| 3d肉蒲团高清在线| 丰满的女同学3| 《叔叔》完整版| 锦月如歌电视剧免费观看| 埃及皇后2003满天星版| 电视剧大河儿女| 电视剧同性| 滚烫公媳全集免费观看电视剧| 六指琴魔| 一人之下电视剧免费观看全集高清| 择天记第三季| 蜜桃成熟时1997国语搜狗| 我的战鹰绕着宝岛飞原唱| caoliuluntan| 心跳电视剧在哪看| 《她被搬运工侵犯》在线观看免费| 《我要再来一次》完整版在线观看| 父母爱情在线观看全集完整版电视剧| 高压监狱2法版1小时43分| 阴阳眼见子全集观看| 阴阳镇怪谈电影在线观看完整版| 妈妈爱上儿子同学》》 - 日韩字幕手机免费播放 - 雅澜影院 | 送上司回家,看到上司老婆| 亲爱的热爱| 少女3完整免费观看版高清在线| 需要爸爸播种在线观看免费高清| 拜托了机长国语版| 浙江西游记| 吴健版农民伯伯1-4集免费看| 天国神族| 女教师引诱12| 女超人满天星法版| 地狱解剖 在线观看| 掩耳盗邻 第二季未删减| 欧式少女16集全免费观看电视剧战狼十| 进击的巨人第二季第四集| 雪中悍刀行第二季全集在线观看| 老公上司来我家| 神不在的星期天动漫| 《私人航空》在线看| 牧神记在线全集免费| 行尸走肉第七季全集| 私人女性监狱-言情片-高清完整版-全集免费在线观看-tvb云播 | 墨少宠妻成瘾:闪婚厚爱全集免费 | 猪大肠刺身| 电视剧幻影| 第一滴血5 国语版| 废渊战鬼| 课中坏事 韩国| 《私人女性监狱》-伦理片在线观看 - 南瓜影院 | 一块五花肉错位关系| 荣耀守则啄木鸟法版| 超危保镖电影完整版免费| 高清《新白娘子传奇》全集免费观看| 公公的浮之手电影 | 花蜜花液汁水野战高H动漫| 疯狂大老千国语| 迪迦奥特曼4| 林世荣电视剧| 夫子庙大市场| 《over flow》真人版| 影音先锋男人源资源| 《倔强驱魔师》1-4集在线观看免费视| 绝望的主妇第八季| 罗丽星克莱尔《迷宫》| 你的婚礼电影免费观看完整版 | 腹黑总裁:只对我温柔全集免费| 高压监狱2无删减1080P| 仙逆更新到75了| 美人心计18| 俄罗斯需要爸爸播种电影剧情| 捉奸侦探 高清| 雪中悍刀行40集免费| 需要爸爸播种 在线观看| 变形金刚:超能勇士| 三国陈建斌版国语免费观看| 《丰满的继牳3》无删减| 高清《老医馆》全集免费| 玫瑰的故事更新时间 | 渔民家3个姑娘| 独家记忆百度云| 年少有为不自卑| 天山暮雪电视剧全集| 十九岁中国高清免费版爱奇艺| 见面4秒就合体| 镜双城电视剧免费观看全集完整版| 桐庐县| 波多吉野电影。| 我和我的传奇| 废柴兄弟| 铿锵铿铿锵免费观看西瓜视频| 密爱高清下载| 长津湖电影免费观看| 继续被义子侵犯完整版| 解密在线观看免费高清完整版 | 主君的太阳13集| 广场舞九月九的酒| 熊出没之重启未来免费观看完整版| 皇后进宫电视剧| 狼群HD在线观看免费完整版| 天天乐电影网| 我爱夜蒲2| 法国《口咬》电影完整版剧情介绍| 麦乐迪女超人A片免费看| 至尊无上之永霸天下| 《丰满的继牳5》在线观看| 美国女儿要爸爸播种电视剧马| 麦迪乐在线| 85老版隋唐演义电视剧| 爸爸的种子第二季全集免费看| 动画片美猴王| 学校风云免费| 黑白配在线观看完整版免费高清| 铃木里美在线观看| 台湾经典剧《浪漫女家教》黛比扮演| 李丽莎无圣光原图| 私人女性监狱在线播放| 迪迦奥特曼7| 灯草和尚qvod| 韩剧需要父亲播种| 我为卿狂百度影音| 死神在线观看| 台东县| 跳进地理书的旅行第二季| 剑王朝电视剧在线观看| 黑白配高清完整版在线观看| 电影英雄下载| 禁止的爱 免费观看 百度百度| 加油吧实习生全集| 欧式少女16集全集在线观看视频下载| 爱你陈芳语| 3380理论| 张警官三部曲 免费观看| 农民伯伯下乡2第二部叫什么名字 部长出差的日子 免费看 | 意大利电影八尺夫人在线观看| 妖精的尾巴剧场版凤凰的巫女| 兵临城下美版电影| 爱死亡与机器人| 《社长夫人》天使萌演员表| 少年包青天1高清| 侏儒人被黑人蹂躏mp4| 男女一起愁愁愁免费观看| 高清《大秦帝国》| 无人区日本电影在线观看| 天时地利人和英文| 哪里可以观看《V酒店第一季》?| 还珠格格二部全集播放免费观看| 情难自禁 2024 代高政| 刘宝瑞解学士全集| 慢性呕吐实验室免费观看完整版电影| 无间在线电视剧免费观看| 八戒在线观看免费高清电视剧狂飙| 《甲种公牛》1976意大利| 韩国电影老婆与老公上司| 一仆二主电视剧 39| 照亮你在线观看| 私人航空在线观看完整版电影| 虎山行高清在线观看全集免费| 都行广告| 战旗如画全集观看| 男女插曲痛观看免费高清完整版在线观看| 性治疗医生| 电视剧咱们结婚吧全集| 刘德华台北演唱会| 隐形帽子在线观看| 逆天狂妃:邪王靠边站全集免费| 小燕子一家人| 英雄免费| 法国空乘| 小苹果韩国版| 无处藏身全集电视剧免费观看| 免费李宗瑞全集在线观看| 美国wwwwxxxx69| 一不小心爱上你歌曲| 爱情醒来了| 爱丫爱丫40集| 美味快递员的特殊待遇| 冰雪奇缘百度影音| 星球大战原力释放| 北影校花陈冰冰| 美丽蜜桃5| 冬暖花会开电视剧全集免费观看| 何洁门照艳全集| 再见黄浦江| 《无憾》法国版在线观看| 邻居也风狂第1集| 校花的贴身高手无删减版电视剧 | 《法国护士长》伦理| 骄阳似火电视剧全集在线观看| 芭比彩虹仙子之美人鱼公主| 奔跑吧兄弟20141226| 《战士》凯登克罗斯| 谷村新司星歌词| 落落历险记| 12龚玥菲新金梅3d观看| 《悲惨遭遇》1980年| 一起吃饭吧第三季| 封神榜2高清免费观看| 味道食在乡| 哇嘎影视大全免费| 高清《荒岛美人鱼》电影在线播放| 高楞青年| 神探夏洛克 第三季| 私人航空电影完整版在线观看高清| 鸣鸟不飞:乌云密布电影 | 暴躁老妈40集全在线观看| 风起洛阳 电视剧| 再见美丽小姐国语版| 贝多芬小姐的启濛| 法国女版《壮志凌云》高清免费哪儿 | 保姆的特别待遇免费| 小巷人家40集全部播放目录| 黑白诀电视剧免费观看完整版高清| 恶魔高校d d| 行政助理2014免费完整版| 司藤免费观看全集完整版|