嵌入式編碼規(guī)范,收藏細讀!

嵌入式資訊精選 2021-01-26 00:00

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

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

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

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

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

1、清晰第一

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

2.、簡潔為美

簡潔就是易于理解并且易于實現(xiàn)。代碼越長越難以看懂,也就越容易在修改時引入錯誤。寫的代碼越多,意味著出錯的地方越多,也就意味著代碼的可靠性越低。

因此,我們提倡大家通過編寫簡潔明了的代碼來提升代碼可靠性。廢棄的代碼(沒有被調(diào)用的函數(shù)和全局變量)要及時清除,重復代碼應該盡可能提煉成函數(shù)。

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

產(chǎn)品所有人共同分享同一種風格所帶來的好處,遠遠超出為了統(tǒng)一而付出的代價。在公司已有編碼規(guī)范的指導下,審慎地編排代碼以使代碼盡可能清晰,是一項非常重要的技能。

如果重構/修改其他風格的代碼時,比較明智的做法是根據(jù)現(xiàn)有代碼的現(xiàn)有風格繼續(xù)編寫代碼,或者使用格式轉(zhuǎn)換工具進行轉(zhuǎn)換成公司內(nèi)部風格。

一、頭文件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

規(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 同一產(chǎn)品統(tǒng)一包含頭文件排列方式。

二、函數(shù)

原則2.1 一個函數(shù)僅完成一件功能。

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

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

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

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

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

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

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

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

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

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

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

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

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

建議2.1 函數(shù)不變參數(shù)使用const。

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

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

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

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

建議2.4 函數(shù)的參數(shù)個數(shù)不超過5個。

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

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

三、 標識符命名與定義

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

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

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

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

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

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

建議3.2 盡量避免名字中出現(xiàn)數(shù)字編號,除非邏輯上的確需要編號。

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

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

建議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 函數(shù)命名應以函數(shù)要執(zhí)行的動作命名,一般采用動詞或者動詞+名詞的結構。

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

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

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

四、變量

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

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

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

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

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

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

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

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

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

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

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

建議4.5 盡量減少沒有必要的數(shù)據(jù)類型默認轉(zhuǎn)換與強制轉(zhuǎn)換。

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

五、 宏、常量

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

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

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

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

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

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

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

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

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

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

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

六、質(zhì)量保證

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

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

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

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

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

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

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

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

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

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

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

原則6.4 不僅關注接口,同樣要關注實現(xiàn)。

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

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

堅持下列措施可以避免內(nèi)存越界:

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

堅持下列措施可以避免內(nèi)存泄漏:

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

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

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

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

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

建議6.1 函數(shù)中分配的內(nèi)存,在函數(shù)退出之前要釋放。

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

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

建議6.3 不要濫用goto語句。

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

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

七、 程序效率

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

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

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

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

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

建議7.4 將多次被調(diào)用的 “小函數(shù)”改為inline函數(shù)或者宏實現(xiàn)。

八、 注釋

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

九、 排版與格式

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

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

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

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

換行時有如下建議:

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

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

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

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

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

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

十、 表達式

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

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

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

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

十一、 代碼編輯、編譯

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

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

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

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

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

十二、 可測性

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

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

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

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

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

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

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

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

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

說明:斷言是用來處理內(nèi)部編程或設計是否符合假設;不能處理對于可能會發(fā)生的且必須處理的情況要寫防錯程序,而不是斷言。

如某模塊收到其它模塊或鏈路上的消息后,要對消息的合理性進行檢查,此過程為正常的錯誤檢查,不能用斷言來實現(xiàn)。

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

十三、 安全性

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

十四、 單元測試

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

建議14.1 單元測試關注單元的行為而不是實現(xiàn),避免針對函數(shù)的測試。

說明:應該將被測單元看做一個被測的整體,根據(jù)實際資源、進度和質(zhì)量風險,權衡代碼覆蓋、打樁工作量、補充測試用例的難度、被測對象的穩(wěn)定程度等,一般情況下建議關注模塊/組件的測試,盡量避免針對函數(shù)的測試。

盡管有時候單個用例只能專注于對某個具體函數(shù)的測試,但我們關注的應該是函數(shù)的行為而不是其具體實現(xiàn)細節(jié)。

十五、 可移植性

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

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

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

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

原文:https://blog.csdn.net/qq_33499229/article/details/88677757

1.國產(chǎn)替代摸不著門兒?快來回看兆易創(chuàng)新直播課!

2.開源的RISC-V能否成為中國“缺芯”的解藥?

3.樹莓派Pico:僅4美元的MCU

4.MCU支持AI功能的多種原因~

5.2020年,我學習到的20條軟件工程準則~

6.狀態(tài)機思路在嵌入式開發(fā)中的應用~

免責聲明:本文系網(wǎng)絡轉(zhuǎn)載,版權歸原作者所有。如涉及作品版權問題,請與我們聯(lián)系,我們將根據(jù)您提供的版權證明材料確認版權并支付稿酬或者刪除內(nèi)容。

嵌入式資訊精選 掌握最鮮資訊,盡領行業(yè)新風
評論
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 212424瀏覽
  • 讓微弱脈沖信號更清晰——鎖相放大器集成Boxcar平均器在脈沖激光、泵浦-探測、時間分辨光譜、飛行時間質(zhì)譜等實驗中,真正需要測量的信號往往只出現(xiàn)在一個很短的時間窗口內(nèi),卻被淹沒在遠大于它的噪聲和背景之中。 針對這類穩(wěn)定重復的微弱脈沖與瞬態(tài)信號,賽恩科儀為OE2052雙通道數(shù)字鎖相放大器帶來全新的Boxcar Averager功能升級:在鎖相檢測之外,進一步提供從周期波形觀察、門控測量到多周期平均的完整數(shù)字Boxcar測量鏈路。 Boxcar平均器,如何從噪聲中“截取”目標信號?Boxcar平均器
    SSI_賽恩科儀 2026-08-07 15:49 13502瀏覽
  • 一、方案簡介在Buildroot構建的嵌入式Linux系統(tǒng)中部署Flutter應用,主流有兩套成熟的開源方案,分別適配不同的顯示場景與開發(fā)需求:方案一:flutter-elinux(Sony開源方案)由索尼官方維護的嵌入式Linux Flutter工具鏈,既支持DRM/GBM直接渲染,也兼容Wayland、X11等多種顯示后端,場景適配性更廣。方案二:flutter-pi(輕量級嵌入器)一款輕量級Flutter引擎宿主程序,僅基于底層DRM/GBM接口實現(xiàn)渲染,無需依賴桌面環(huán)境,資源占用更低,更
    飛凌嵌入式 2026-08-07 09:34 150瀏覽
  • 做藍牙音箱的工程師大概都碰過這個局面。產(chǎn)品要連手機放歌,要本地播開機提示音和按鍵音,還要接 App 做配網(wǎng)和狀態(tài)上報。三件事拆開,早先的常規(guī)做法是音頻藍牙一顆料、數(shù)傳藍牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍牙、BLE 數(shù)傳和 MP3 本地播放三樣全包了。對藍牙音箱來說,最實在的好處就
    唯創(chuàng)知音語音芯片 2026-08-06 15:14 359瀏覽
  • 做電池供電攝像頭、可視門鈴、戶外安防的同學應該都踩過這個坑:攝像頭要拍,ISP、sensor、無線模塊全得開著,整機電流動輒幾百 mA。一節(jié) 18650 撐不了幾天,用戶投訴“怎么又沒電了”。有人會說:加個 PIR 人體紅外不就行了?問題是 PIR 怕熱、怕寵物、怕隔著亞克力/玻璃殼,而且只能感知“有溫差的人體移動”,靈敏度飄忽。真正省電的思路應該是:讓攝像頭平時徹底睡死,只有“前面有人/有動靜”時才被一鍵喚醒——而負責這個“看門”角色的,最合適的是一顆低功耗雷達。一、為什么是雷達,而不是 PI
    唯創(chuàng)知音語音芯片 2026-08-07 14:44 168瀏覽
  • 樓宇自控里的“巴別塔”一棟智慧樓宇、一個產(chǎn)業(yè)園區(qū)里,暖通空調(diào)運行著廠商私有協(xié)議,照明系統(tǒng)遵循專屬通信標準,變配電、門禁安防各成體系——設備間數(shù)據(jù)壁壘森嚴,上位平臺對接全靠定制化 “翻譯” 開發(fā),不僅成本高企,交付周期也難以管控。這就是樓宇自控行業(yè)多年的痛點:協(xié)議林立、封閉林立。而破局的鑰匙,早在30多年前就已經(jīng)寫好了——BACnet。作為ASHRAE制定的樓宇自控國際標準協(xié)議,BACnet是如今全球樓宇自控系統(tǒng)(BAS)互聯(lián)互通的“通用語言”。新風機、冷源群控、變配電、照明、門禁,凡是需要被樓宇
    飛凌嵌入式 2026-08-10 09:26 192瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩(wěn)定起振的成品,要經(jīng)過十幾道精密工序。它內(nèi)部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個生產(chǎn)過程里哪怕0.1微米的誤差,都會直接廢掉整批產(chǎn)品,這也是小尺寸晶振過去長期依賴進口,國內(nèi)廠商花了十幾年才啃下量產(chǎn)硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 512瀏覽
  • 摘要東莞市恒創(chuàng)連接器有限公司(HCHGCONN)是位于廣東東莞的連接器源頭制造工廠,專注于連接器國產(chǎn)替代、小間距大電流連接器、線對板連接器、線對線連接器、板對板連接器、電源連接器及定制連接器開發(fā)。公司面向工業(yè)自動化、新能源儲能、BMS、汽車電子、AI服務器、GPU供電、通信設備、醫(yī)療設備和智能家居等場景,提供從產(chǎn)品選型、替代評估、樣品驗證到批量交付的一站式連接方案。恒創(chuàng)可支持 Molex、TE Connectivity、JST、Hirose、Samtec 等國際品牌部分系列的國產(chǎn)替代評估。常見替
    HC003 2026-08-07 10:14 155瀏覽
  • 在物聯(lián)網(wǎng)從“萬物互聯(lián)”邁向“萬物智聯(lián)”的進程中,LTE Cat.1憑借其在速率、成本與網(wǎng)絡覆蓋之間的完美平衡,正成為中低速物聯(lián)網(wǎng)市場的絕對主力。隨著2G/3G網(wǎng)絡的逐步退網(wǎng)以及新國標對終端設備智能化、定位功能的強制要求,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瀏覽
  • 產(chǎn)品使用18V供電,配套4串鋰離子電池,需要設計一個充電器。因為輸入18V,電池最高 16.8V,壓差僅 1.2V。因為壓差太小。使用開關型的充電控制芯片不穩(wěn)定。嘗試自行設計一個。整體采用分立三極管 + TL431架構,分4個功能單元:使能控制回路、限流環(huán)路、TL431 精密恒壓反饋環(huán)路、PNP 功率管主功率輸出回路;實現(xiàn)完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經(jīng) R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導通,對地拉低 R1、R2 組成的分壓控制節(jié)點電位;該節(jié)點直
    southcreek 2026-08-07 13:45 468瀏覽
我要評論
0
點擊右上角,分享到朋友圈 我知道啦
請使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 《房顶工》拉拉电影免费观看| 开心超人| 陪讨厌上司去出差旅| 宝莲灯免费| 视觉监狱| 最高的爱人诏哪里能看| 高清抢钱女王团| 铠甲勇士全集播放| 《打黑风暴》22集全| 三生有幸遇见你免费观看| 黑白配HD1080完整版版| 猎罪图鉴2在线观看免费| 巳怎么读| 已婚妇女的下午| 老友记第三季| 遇见王沥川全集免费观看云播| 《性的暴行》DVD版| 变形金刚7| 碟中谍8:最终清算未删减| 禁忌5免费在线观看| 欲望都市第四季| 巡回检察组43全集在线观看星辰| 陕西秦腔华亭相会| 山东近32万考生成绩达一段线| 2001太空漫游电影| 总统夫人罗丽星克莱尔| 挤痘大师| 电影《暗夜》完整版| 丈夫的上司来家拜访完整版| 分手后程医生哭出鼻涕泡短剧免费| 上错花轿嫁对郎吻戏| 捆绑堵嘴3级强奸电影| 至上之法| 南风拂我意| 年轻漂亮的保姆.6| 书卷一梦电视剧免费观看完整版| 战狼6欧美版完整资源| 魔王军的最强魔法师是人类| 大汉天子2| 维修师傅的艳遇在线观看 | 我的妈妈是校花未删减| 美容院特殊职务5| 浴火之路 电影| 电视剧红妆| 蓝色隐身帽子在线观看| 心甘情愿郭峰| 小米su7发布会直播| 他用舌头给我添高潮部分韩国男人| 海之声免费完整版如如| 西瓜视频在线免费观看| 迷雾电影在线观看免费完整版全集| 苹果影片| 碧血青天杨家将| 桓台县| 电影《恋爱成瘾》免费观看| 啦啦队长| 前郭尔| 东方在线观看| 我的漂亮女房东完整版BD| 韩国电影我的游泳教练| 泰国电视剧丘比特的圈套| 异世界四重奏| 暴躁少女完整版在线看| 都市风水:改运超神全集免费| 高清《谎言》在线观看| xl司令第一季全集免费观看| 好看的电视连续剧| 寒战2电影| 坎贝奇无憾完整版片段| 你是我的荣耀西瓜影音| 火口的两人全集免费观看| 韩国电影美容店的特别待遇5中字| 火山高校国语| 电影《特邀外卖员无码| 身在其中| 电影激战丛林在线观看| 侏罗纪世界在线观看| 爱情公寓第一季全集| 和丈夫的部下玩火的夜晚HD无字_经典电影_手机完整版在线观看_纤纤影院 | 恋爱FLOPS| 白峰电影高清无广告免费看| 家族荣誉3| 保姆一级片| 法国版《安全出口》| 白峰ミウ女教师无删减在线播放 | 好想做一次大结局免费观看| 桃姐电影| 法国护士长2006| 三生缘起是清欢| 爱唯侦探dvd| 蓝湾牧羊犬| 郑和下东洋电视剧| 小蓝台湾电影结局完整版在线观看| 牙医姐妹1986| 正者无敌剧情| 家庭教师动漫全集4集| 性生活伦理电影| 《狙击精英巅峰对决》电影| 插曲的痛免费观看第5集| 烈爱交易| 就算是爸爸也想做免费观看| 《高冷搜查官》苍井空| 本草药王国语电视剧免费观看| 幸福最晴天花絮| 《图书馆的女朋友》1-6结局| 佐罗 西班牙| 侦探成旭2千年迷局| jizz日本免费| 八仙全传之八仙过海全集| 能出没之逆转时空的免费大电影| 别墅轮换3攻略完整版免费| 新假面骑士| 玄奘之路纪录片| 一个好妈妈HD2答案| 澎恰恰电影| 狙击蝴蝶电视剧全集| 古墓丽影特别版法国| 万里归途电影免费看| 异动公告被取消?系误读| 新乡市| 留存的爱全集观看| 男生打游戏听出网友病危| 无敌幸运星粤语版| 外国电影爸爸的种子在线看| 真爱谎言下载| 山丹丹开花红艳艳伴奏| 女版007女警满天星观看| 青春之旅电影| 所罗门王凯恩| 《伦理按摩2》大片| 少女高清动漫在线观看| 锦衣之下电视剧在线观看| 加勒比海盗女海盗1在线看免费完整版| 大人物包贝尔电影在线观看| 林心如夏雨荷| 吗吗吗朋友e| 铃芽之旅在线观看| 最近免费韩国高清在线观看| 美味的快递员| 电视剧城中之城免费播放在线观看| 王琦 九种体质| 战狼6高清免费观看入口| 加拿大碎尸案完整版| 美剧 监狱风云| 化妆舞会1998罗丽星克莱尔| 家经难念| 蜡笔小新免费观看| 甜蜜皮鞭百度影音| 韩国年轻大胸的继拇999| 郑少秋个人资料简介| 电影推油| 要过好日子下载| 我的女游泳教练| 鬼畜女子监狱| 太阳的后裔15| 木下檀檀子完整版电影| 广西综艺旅游频道直播在线观看| 电影大刀王五| HR版女版壮志凌云观看| 追风在线观看免费高清| 信仰1—42集免费观看视频播放| 电视剧扫黑风暴| 蒲扇团之极乐净土鉴宝百度云盘| 遮天 全集| 生死速递2| 花蝴蝶4免费全集在线看| 龙之谷夏萝莉的照片| 摸金天师之秦岭凶墓电影| 麦乐迪马克斯女超人电影| 杰啊教你说闽南语| 火火的姑娘云裳广场舞| 金莲外传在线观看免费版电视剧全集| 我心似海洋| 雪中行第二部50集免费观看| 万界独尊无垢剑武魂小说| 二十一世纪性格爱情指南英国 | 快乐至死韩剧在线播放免费| 毒王肥尸| 《逆袭》电视剧双男主免费观看| 欢乐老弄堂| 伦理《法国护士长》在线播放| 漂亮的保姆播放免费观看| 电影灰姑娘的故事2| 爱我几何150分钟完整电影在线观看完 | 高清唐顿庄园3未删减| 维修师傅的艳遇韩国理论片在线观看 | 灵与肉电视剧剧情介绍| 特邀外卖员手机电影| 坎贝奇《品味人生无憾》完整品| 日常卿卿| 黑人巨茎大战俄罗斯美女| 危险人物粤语| 看不见的朋友| 沟壑难填2意大利语版主演 | 疯狂的外星人免费完整电影高清| 红领章电视剧免费播放| 凌云壮志2011凯登克劳斯电影免费| 猛鬼山坟 电影| 姐姐4韩国电影| 金银梅5-10普通话版| 万古神话免费观看全集完整版| 独生子女的婆婆妈妈| 鬼吹灯之牧野诡事电视剧免费观看| 美乃雀 在线观看播放| 鹊刀门传奇2| 国产人妻与上司午后出轨 | 《好东西》剧情介绍| 鲜花盛开的山村电视剧免费观看| rbd505| 全红婵首夺世锦赛单人金牌| 情陷夜中环粤语| 成全完整版动漫高清免费| 密桃成熟时3dd| 潜罪犯粤语| 妈妈替儿子还债日本电影叫什么| 兰陵王电视剧| 海天之恋剧情| 波动女郎| 男按摩师做乳房按摩的电影| 触手可及的幸福电视剧免费观看全集| 斗罗大陆全集免费观看完整版高清| 满天星安娜采访拳王泰格| 阴谋与婚礼| 新水浒传 高清| 鬼眼刑警| 八尺夫人意大利在线观看| 梦里水乡mtv| 欢乐颂25集| 西班牙《掌中之物》电影 | 扫黑风暴在线观看免费完整版高清| 《除却巫山》海外版| 爱情是什么电影在线观看| 遇龙电视剧完整版免费| 《私人航空》在线看法国| 猎罪图鉴电视剧在线观看免费观看| 心动的信号第8季| 战狼6免费高清版999加拿大版| 保险女王她的商业秘密中文版翻译| 我是余欢水40集免费播放| 七夜雪电视剧全集免费观看| 精油按摩和老公隔了一个帘子| 三哥田螺| 樱桃电影| 《新上任的秘书》| 活死人军团| 沉默的羔羊香港版| 封神榜3第三部免费播放| 星汉灿烂21集在线观看| 地道战全集| 博多豚骨拉面| 红壳的潘多拉| 美女搜查官| 快乐大本营2017免费观看完整版| 济公传奇2| 30分钟插曲免费播放第8集| 半身死灵2| 2001太空漫游免费| 迪迦奥特曼1| 我的健身锻炼电影观看| 聊斋3梅女| 小奥尼尔厉害吗| 福建省| 美景之屋6:我的完美人生免费观看完整版 | 新妈妈完整| 男人女人一起愁愁愁电视剧观看在看| 咒术回战| 月半爱丽丝电视剧免费观看完整版| 泡芙小姐| 年轻女教师5| 夫妻的春天电视剧| 女婿有劲枪枪到底岳峰扮演者| 姐妹牙医 在线| 海上繁花电视剧在线观看| 名侦探柯南714| 比天堂还美丽| 插曲的痛高清视频免费| 喜羊羊与灰太狼4| 女人与公狼配| 黑白配高清国语免费观看视频| 高清忒弥斯的不确定法庭| 电影《长征》免费观看| 《偷窥:妻子出轨》| 铠甲勇士星耀觉醒| 唐诡事录之西行| 美国新版娃娃脸9| 与年轻岳那些年高2828清| 平凡的荣耀免费观看| 异种 电影| 铁探免费在线观看| 哇嘎电影免费观看高清版下载| 熊猫战士全集| 玩命追踪国语| 死亡笔记| 酒店激战第1-5集免费观看| 流行曲谱| 无忧渡电视剧在线观看全集| 黑白配高清中文完整版 | 东归英雄传电视剧| 《Melody女超人》在线播放| 隐形帽子韩国| 曾志伟最新电影| 失魂客栈| 死神来了8免费高清播放下载| 青春之旅电影| 狙击杀手| 法版空姐2020免费观看电视剧| 蝴蝶行动在线观看| 印度19名官员被热死| 高清《克劳德夫人》电影| 壮志凌云2女飞行员版在线观看| 宸汐缘电视剧免费观看全集| 单立文金瓶梅| 维修工的绝遇3| 满江红电视剧免费观看| 家常菜电视剧全集免费观看| 刘宝瑞相声全集| 《爱我几何》高清免费看| 独步逍遥在线观看| 末路狂花电影在线完整观看| 一个完美结局电影完整版在线观看| 在姨母家的遗憾完整版播放| 霍比特人意外旅程百度影音| 好运来电影在线观看| 美国渔民家三个女儿2| 外国电影爸爸的种子在线看| 师傅日徒弟的场景| 女皇之刃下载| 古墓丽影法国版在线播放| 韩国情书复古舞| 抗日奇侠全集播放| 电视剧枣树湾免费观看 | 高清《先婚后爱》网剧| 姐妹4完整版在线观看| 97免费观看在线观看电视剧 | 综艺节目 女体探秘 | 决战秋瓷炫三部曲| 香山叶正红电视剧| 小娘惹电视剧免费全集看剧情| 婆婆妈妈综艺在线观看| 干妈在线| 崔健再唱摇滚| 上海圣诞节| 禁忌5年转一代禁忌| 捉妖记免费观看完整版| 小欢喜全集免费观看完整版| 精忠岳飞电视剧全集| 年轻的儿媳妇字头范文| 丰满的继牳3小早川怜子bd电影| 怀孕小常识| 大鸿米店电影| 地球防卫未亡人| 《播种女儿》完整版在线看| 霹雳惊涛| 信仰1—42集免费观看视频播放| 《21世纪爱情指南》免费观看高清| 向着胜利前进电视剧全集在线观看 | 女人我最大下载| 盲点 美剧| 白色城堡电视剧免费观看| 再见绝望村| 红字 韩国| 高清《灭火宝贝(高压监狱)》| 女战士满天星免费观看完整版| 《overflower》第一季| 开学第一课直播2021| 广东漂亮孕妇被群殴| 玉女心经阴阳和合在线观看免费版电视剧全集 | 妖精的尾巴53| 漂亮的小姨韩剧免费观看完整版电视剧中文版 | 将军夫人全集免费| 荣誉之战满天星在线播放| 电影洗澡| 我和前妻谈恋爱| 我不是神仙啊| yellow在线观看黑丝| 快乐到死电影免费高清在线观看国语| 梦魇绝镇第一季免费观看完整版| 安娜德阿玛斯| 泰国双人按摩在线观看| 东北女不戴套在线看| 佐佐木与宫野| 活佛济公 第三部| 成全动漫免费完整版高清| 普法栏目剧回家6| 断背山高清下载| 苹果范冰冰完整版| 电影《家政老师2》免费观看| 男与女韩剧电视剧结局免费观看 | 爆操老妈第46集完整版| 澳门风云1电影| 周杰伦迷魂曲| 鸟的天堂教案| 《办公室的故事》| 心灵的呼唤| 1500美元等于多少人民币| 都挺好 电视剧在线看| 北越暴行| 火柴人格斗动画| 盲女72小时完整版| 摇曳庄的幽奈小姐动漫| 翼舞和部长一起去出差旅是什么电影| 战略特勤组| 胜女的代价优酷| 第11个妈妈| 爱我几何在线观看完整版免费版 | 善良的女秘书免费| 延长县| 电影空姐| 血溅十三号警署| 《色戒》未删减在线观看| 韩“慰安妇”想见佩洛西被警卫推倒| 美丽小蜜桃5满天星| 林正英的僵尸电影| 怒呛人生免费观看全剧完整版| 腾飞担保公司| 玛丽萨科满天星原版| 电视剧大明风华62全集免费观看 | 子弹慢镜头| 蛇片大全电影国语| 《俘虏之锁》免费观看完整版| 太极张三丰李连杰| 小偷家族电影观看完整版| 突然的喜欢电视剧免费观看| 贝拉1980满天星版| 金瓶梅电视剧| 花与爱丽丝| 战至巅峰第三季2024免费观看 | 碟中谍在线观看| 莫小棋三级| 凯登克罗斯| 灿烂遗产| 悲伤比更悲伤的故事| 罗百吉的老婆| 法版《执行秘书》2014| 银行家的妻子中语| 黑暗圣经在线| 天使的3d动漫| 人猿泰山hr版1995在线观看| 溢出overlove第一季全集免费观看| 限定婚约| 夺命鹰爪功电影| 人鬼殊途之无头鬼夫| 《部长出差的日子》2| 智取威虎山电影| 妖精的尾巴45| 紧急行动电视剧| 电影私人航空完整版播放| 征服者电影| 中山二院癌症患者家属发声| 郭晶晶的婚礼| write as 走麻绳| 《被丈夫的下属推来推去的妻子》HD中字-完整版全集在线观看-电影[1]-4m影院 | 沉默电视剧在线观看免费完整版| 将军家的小狐仙| 动漫《花嫁高柳家》在线观看 | 韩国维修师的艳遇BD金山丽| 兄弟车行 百度影音| 韩剧big| 将错就错电影完整版| 落魄贵族琉璃川1-2集在线播放| 需要爸爸的播种 在线观看| 诡秘之主动漫免费完整版| 凝固的爱 试戏现场| 夹江县| 酒店1到50集免费观看| 爱能填满空白第二季| 智取威虎山电影完整版| 完美女人| jizz日本16| 我家也有外星人| 风气洛阳| 赌侠1990刘德华| 推销避孕套被要求试用电怎么应对应 | 天上掉下个猪八戒全集| 西藏| 《售楼小姐3》免费观看| 李黎跳芭蕾舞视频| 入青云电视剧免费观看完整版高清| 大明劫在线观看| 《部长出差的日子》韩国| 新还珠格格下载地址| 平凡之路电视剧免费| 烧饼皇后下载| 爸爸的种子第二季哪里能免费看 | 樱蓝高校男公关部| 电影加勒比海盗4| 一人之下电视剧免费观看全集高清 | 广西一保安砍死2名业主| 爱情公寓5在线观看免费完整版| 爹地追来了全集免费| 《驯服小子韩剧丽卡结局》 | 多人运动网站无限观看| 欲罢不能美综| 莫莉3特别酒店免费| 《新人律师法国满天星》还叫什么名| 《我的砍价女王》电视剧| 小大夫电视剧| 回复术士的重启人生观看| 电影水润女人在线观看| 哥布林杀手| 电视剧五号特工组第一部| 一雪前耻电视剧免费观看| 新上任女员工| 五号特工组第三部免费观看完整版| 巴萨对曼联| 拉德斯基进行曲简谱| 富顺县| 巨乳保险推销员| 光荣时代电视剧免费观看完整版| 瓦尼塔斯的手记动漫全集免费| 儿子的房间老妈跟外人睡好吗| 小小水蜜桃6《电视剧》| 卖肉动漫推荐| 苍井空的影片| 更衣服人偶坠入爱河在线| 美国新版娃娃脸9| 美国式禁忌1~4伦理灭火宝贝 | 青青河边草HD免费观看电视剧 | 韩国电影坏小子| 张震鬼故事| 小熊花园综艺在线观看| 老婆6完整版国语电视剧| 战狼6欧式少女免费播放全部| 哈哈哈哈哈第二季免费观看完整版| 暗黑第一季| 《李宗瑞全集》云播| 加勒比女海盗在线| 高清绝望写手 第五季| 武林女大生| 洗屋先生我和| 初体验5电视剧| 图书馆里的女友动漫1-6集全集免费观 | 站着再来一次17集全免费播放| 走出西柏坡 百度影音| 陈伟霆演的鸭的电影名字| 现在就出发第一季| 凯·帕克《囚禁》| 她来自胡志明市第二郡| 桃花映江山免费观看完整版| 宋小宝2022年最新小品| 王嘉尔 papillon| 人猿泰山hr版| 长相思第二季完整版免费播放 | 血战钢锯岭| 韩剧《面试2》观看完整视频 | 爱没那么简单 黄小琥| 鬼吹灯之寻龙诀电影| 《被可怕的科长欺负的新人》免费观| 牧化师4污染的讲台在线观看| 刀尖上行走全集| 老师好在线观看| 去有风电视剧免费观看高清| HD版激战丛林| 《色戒》电影在线观看| 同班同学在线电影免费观看完整版| 白雪公主满天星| 巜美国禁忌4大结局| 电影《贝拉1980》在线观看| 《私藏浪漫》| 高清判处勇者刑未删减| 哀乐大全| 新有菜免费看| 末班车后胶囊旅馆| 女销售的销售秘诀中字韩国| 昨夜之灯| 日本阅兵| 幸福摩天轮粤语版| 健身房的激情| icegirl| 男女一起愁愁愁免费观看电视剧动漫| 烽火连城诀电视剧全集在线观看| 高清《杀破狼》电影| 《overflower》第一季无马赛免费观看直| 分手大师高清完整版| 曲剧清风亭全场| 今天开始当杀手| 牙医姐妹电影在线完整版观看| pppd-258| 飓风奇劫电影| 搜查瑠公圳| 刑名师爷演员表| 周弘《村姑》1994年版| 束博游戏全集| 光能使者国语版全集高清| 小东西逃跑是要受到惩罚的| 豪门恩怨| 三姐妹瑜伽健身原版| 女超人 法国| 风云2在线观看| 卷毛被表白| 暗区突围秘密任务| 牝老师| 电影《牙医姐妹》| 寒战高清完整版| 韩剧《大力女子都奉顺》| 赖汉的幸福指数 电视剧| 女版战狼19高清国语免费观看 | 房术入门40个动作| 凯登克罗斯在线| 长安如故在线观看| 《法官李汉英》| 真相2021电视剧在线观看| 美国队长1免费高清完整版观看 | 蜜桃成熟时33d国语下载| 男与女电影| xl司令第一季无马赛免费观看高清 | 晚娘全集| 亲爱的妈妈5在线播放BD| 八尺夫人满天星版免费观看第7集| 小马宝莉全集| 电影儿媳的味道在线播放中文| 骄阳似我赵今麦电视剧第7集| 斗罗大陆2绝世唐门完整免费观看| 美丽小瘦子7| 我是大明星奇迹少年| 人间世全集免费观看| 华语电视| 赌王之王重出江湖| 冰河剧集法国空姐4| 丧事唢呐| 人间中毒未删减完整版| 玄奘之路纪录片| 电视剧车神| 除却巫山邓家佳DVD版| 女按摩师3| 闪婚谁怕谁| 沉默的羔羊在线观看| 亲爱的妈妈5在线播放| 哇嘎电影在线播放免费版| 苍月女战士AV无删减版| 尹律最新电影| 电影春心荡漾| 忏悔电影| 法国特殊理发店| 白峰美羽免费在线观看| 富贵开心鬼电影| 亲爱的你电视剧免费观看完整版| 绝密543部队免费观看| 一只鸽子在印度被当成中国间谍| 贝拉1983怀旧经典复古电影| 三年大片免费完整版| 春宫电影人| 忍者龙剑传1| 老妈的花样年华| 蜜桃成熟时百度百科| 三年大片观看免费国语第一集| 韩剧看了又看| scp电影| 赤裸的无名指| 影音先锋国产资源| 行尸走肉 美剧| 韩国电影空姐| 特殊的内衣销售员| 哒哒哒在线观看播放免费| 野蛮人科南| 我的留级岳父| 罗莎版《拳击手2》在线观看| 英雄本色3电影完整版免费观看| 不扣纽扣的女人| 《女海盗1》免费观看| 乡村爱情7免费全集播放| 工作女郎韩国电影| 光头佬的电影| 《销售秘密》3| 高清《聊斋之宝盒》国语版| 精灵宝可梦bw| 大儿媳叫慧珍是什么电影| 婆婆的味道大结局| 连续剧甄嬛传| 咖宝车神之拯救联盟| 售楼小姐的销售秘密电影 | 1984版保罗1-4在线观看| 辉哥方舟生存进化| 爱的证明全集观看| 桑日县| 天亮以后| 爱情诊所在线观看| 冰雨火40集免费观看| a篇在线观看| 乡村爱情圆舞曲大结局| 高清《先哄后爱》电视剧| 《妈妈爱上儿子同学》李采潭| 中字HD的下属| 小鹏奇啪行| 香港tvb粤语免费观看| 日韩aj| 爱情公寓513集| 超级警车动画片全集| 那小子真酷| 影音先锋网每日| 新不了情免费| 古惑仔电影1-6全集| 公公的浮之手电影| 想几个男人一起论我| 拳皇八神庵| 新水浒传27| 外卖特派员电影免费观看| 百日的郎君免费观看 电视剧| 爸爸在这儿| 着牛仔裤的钟馗| 玄女心经3高清| 高清《艳色》台湾无删减| 《泡我家的辣妹》动漫观看第一集| 农场保卫战满天星在线播放| 风火天下| 评书岳飞传刘兰芳| 恋爱先生电视剧免费观看网站| 《瓜达卢佩的玫瑰》免费观看 | 老严有女不愁嫁片尾曲| 琪琪布网站| 年轻保险销售员2| 俄罗斯爸爸种子| 茅山道士之灵异笔记| 鸡宝厨房| 陪读妈妈1-| 我的黑夜比你的白天更美| 美容院:待遇服务,保姆| 荣誉法则(成人版)未删减版| 奔跑吧兄弟第一期| 特种兵之火凤| 深海之惊蛰| 老炮儿在线观看| 空调维修工的艳遇在线观看| 花与蛇1| 重庆公共农村频道| 陶笛天空之城| 《卖百科全书的女人》| 锦衣卫甄子丹国语| 法国版少女完整版| 射雕英雄外传三弄芙蓉是谁扮演的| 最终痴汉电车| 美姐妹很努力| 《扫毒风暴》免费观看完整版高清| sana哥布林的窑洞在哪看| 我们一起来看流星雨| 家庭秘密教学在线看| 波多野吉衣| 《激战后厨1至5集》精彩原创影评:_酋长的女儿2满天星 | 出差未婚妻被最讨厌的领导欺负| 动画片免费观看| 仙女湖免费观看电视剧全集| 三生三世枕上 书| 猪猪侠之竞速小英雄8免费观看| 《售楼小姐的秘密》| 周弘| 人人都爱雷蒙德第九季| 蜜月酒店杀人事件 电影| 下南洋三毛钱看| 使徒行者3在线看免费| 黄色仓库视频| 最新吃瓜群众在线吃瓜| 青春环游记第四季在线观看完整版 | 上帝的选民| 我老婆是学生会长第二季| 《新来的瑜伽老师》剧情介绍| 飞机上的性服务K8在线观看| 马龙走了五分钟还在原地| 木府风云38| 缘分电影| 笑功震武林粤语| 电影《时间静止器》免费观看| 啄木鸟满天星电影壮志凌云成人版在| 高清《琉璃厂传奇》电视剧| 凯登克劳斯主演电影在线观看| 美剧《真探》第一季免费观看全集| 现在和你相爱的人在一起吗完整版| 按摩女技师| 《险恶的绣感》亮点在| 日语版九品芝麻官| 斗罗大陆更新至241集| 烂赌夫斗烂赌妻粤语高清| 直接看9.1| 高平市| 激情都市在线观看| 老公怎么弄你们的| 喜爱夜蒲未删减| 秀逗魔导士第四部| 大鹏《保你平安》在线观看| 心战电影百度影音| 忍不住的继拇HD中字3| 《贫女复仇记》在线观看| 寂寞护士的引诱在线观看| 溪暮悦影短剧免费播放大全| 科学怪妓电影免费| 完美世界159| 美国禁忌睫毛膏10| 1—5集国语版免费普通话| 有朵云像你全集观看| 胖妹最近10天的视频| 秘密朋友俱乐部| 憨八龟的故事第一部| 漂亮娇妻被社长驯服| 电影私人航空完整版播放| 监狱医生| 庆余年电视剧全集资源| 谁的青春不乱爱| 全职高手第二季在线看| 反对自由主义全文| 下属的妻子去社长家吃饭在线| 爱你几何在线观看完整免费| 偶像大师| 熟妇的滚烫的肉唇翻进翻出| 亡者之谜泰剧在线观看泰剧| 夺命追杀美国电影| 私人航空| 私人航空 电影免费看全集| 高清《年轻的嫂子》| 杨丽花歌仔戏王伯东| 最后一枪百度影音| 星空电影在线观看播放免费| 搞笑虫子| 美丽的蜜桃5| 私人女性监狱免费观看地址| 王阳明40集完整版国语| 夜蒲团2| 辣妞范儿| 海口一护士夜间被患者持刀伤害| 罪恶王冠19| xl司令第一季全集无马赛克在线观看完整版 | 流量女王热搜:常驻选手全集免费| 我是余欢水40集免费播放| 幸得相遇离婚时免费播放| 插曲的痛第60集免费观看高清| 迷人的保姆免费看| 杜淳说绝不允许女儿出国上学| 炫卡斗士2| 法国8号空姐| 《家属动漫》1~6全集| 九一神雕侠侣| 马达加斯加2高清| 使徒行者23| 曾经想火| 《【我推的孩子】 第三季》| 《示范销售避孕套》在线观看| 需要爸爸播种美国哪里可以看| 蜘蛛侠2| 爱我的请过来| 无颜之月在线观看全集电视剧高清| 女子护卫队满天星1973中文| xl司令34集全免费观看| 深入阴宅| 《裤袜视界》| 与外婆同行| 欧洲股市开盘暴跌| 罗刹海市原唱| XL司令第一季真人版在线看| 迷宫HD版| 羊毛战记结局是什么| 《贝利弗山的秘密》电影在线观看| 与黑帮大佬的365日| 搞笑一家人第三部|