華為C/C++語言編碼規范流出

C語言與CPP編程 2023-09-24 08:42

擊上方“C語言與CPP編程”,選擇“關注/置頂/星標公眾號

干貨福利,第一時間送達!

最近有小伙伴說沒有收到當天的文章推送,這是因為微信改了推送機制,有一部分小伙伴刷不到當天的文章,一些比較實用的知識和信息,錯過了就是錯過了,建議大家加個星標??,就能第一時間收到推送。

大家好,我是飛宇。
昨天在我建立的粉絲4群中看到有小伙伴分享一份C/C++編程規范,疑似華為編程規范,很多人都覺得不錯,今天來分享一下。對了,如果你也是一名互聯網從業者,歡迎加入我組建的社群一起交流,群里有大牛也有小白。
歡迎你添加我的微信,我拉你進技術交流群。此外,我也會經常在微信上分享一些計算機學習經驗以及工作體驗,還有一些內推機會。
以下是全文:

作為程序開發者,避免不了閱讀別人代碼,那么就會涉及到到一門語言的編程規范。規范雖然不是語言本身的硬性要求,但是已經是每一個語言使用者約定俗成的一個規范。
最近李偉老師講了《C++ Primer 5th》這本書的視頻,他是美國微軟高級工程師,清華大學博士,幫忙推廣一下,感興趣的可以看看。

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

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

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

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

1、清晰第一

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

2.、簡潔為美

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

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

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

一、頭文件

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

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

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

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

原則1.3 頭文件應向穩定的方向包含。

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

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

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

規則1.2 禁止頭文件循環依賴。

說明:頭文件循環依賴,指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的源代碼重新編譯。

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

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

規則1.4 頭文件應當自包含。

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

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

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

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

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

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

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

規則1.6 禁止在頭文件中定義變量。

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

規則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改變時可能導致聲明和定義不一致。這一點我們因為圖方便經常犯的。

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

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

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

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

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

建議1.4 同一產品統一包含頭文件排列方式。

二、函數

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

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

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

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

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

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

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

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

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

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

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

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

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

img

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

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

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

建議2.2 函數應避免使用全局變量、靜態局部變量和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 產品/項目組內部應保持統一的命名風格。

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

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

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

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

建議3.6 文件命名統一采用小寫字符。

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

規則3.3 靜態變量應增加“s_”前綴。

規則3.4 禁止使用單字節命名變量,但允許定義i、j、k作為局部循環變量。

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

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

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

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

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

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

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

四、變量

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

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

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

規則4.1 防止局部變量與全局變量同名。

規則4.2 通訊過程中使用的結構,必須注意字節序。

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

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

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

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

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

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

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

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

五、 宏、常量

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

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

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

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

規則5.3 使用宏時,不允許參數發生變化。

規則5.4 不允許直接使用魔鬼數字。

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

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

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

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

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

六、質量保證

原則6.1 代碼質量保證優先原則

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

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

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

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

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

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

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

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

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

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

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

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

規則6.1 禁止內存操作越界。

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

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

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

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

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

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

規則6.4 編程時,要防止差1錯誤。

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

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

說明:有很多函數申請內存,,保存在數據結構中,要在申請處加上注釋,說明在何處釋放。

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

建議6.3 不要濫用goto語句。

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

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

七、 程序效率

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

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

建議7.1 將不變條件的計算移到循環體外。

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

建議7.3 創建資源庫,以減少分配對象的開銷。

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

八、 注釋

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

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

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

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

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

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

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

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

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

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

規則8.7 避免在注釋中使用縮寫,除非是業界通用或子系統內標準化的縮寫。

規則8.8 同一產品或項目組統一注釋風格。

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

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

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

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

九、 排版與格式

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

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

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

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

換行時有如下建議:

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

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

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

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

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

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

十、 表達式

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

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

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

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

十一、 代碼編輯、編譯

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

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

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

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

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

十二、 可測性

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

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

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

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

規則12.2 在同一項目組或產品組內,調測打印的日志要有統一的規定。

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

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

規則12.3 使用斷言記錄內部假設。

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

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

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

十三、 安全性

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

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

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

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

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

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

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

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

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

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

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

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

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

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

規則13.3 避免整數溢出。

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

規則13.4 避免符號錯誤。

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

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

規則13.5:避免截斷錯誤。

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

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

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

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

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

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

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

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

規則13.10 防止命令注入。

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

十四、 單元測試

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

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

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

十五、 可移植性

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

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

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

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

EOF

你好,我是飛宇,本碩均于某中流985 CS就讀,先后于百度搜索以及字節跳動電商等部門擔任Linux C/C++后端研發工程師。

同時,我也是知乎博主@韓飛宇,日常分享C/C++、計算機學習經驗、工作體會,歡迎點擊此處查看我以前的學習筆記&經驗&分享的資源。

我組建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起進群交流。

歡迎你添加我的微信,我拉你進技術交流群。此外,我也會經常在微信上分享一些計算機學習經驗以及工作體驗,還有一些內推機會

加個微信,打開另一扇窗

C語言與CPP編程 C語言/C++開發,C語言/C++基礎知識,C語言/C++學習路線,C語言/C++進階,數據結構;算法;python;計算機基礎等
評論
  • 做藍牙音箱的工程師大概都碰過這個局面。產品要連手機放歌,要本地播開機提示音和按鍵音,還要接 App 做配網和狀態上報。三件事拆開,早先的常規做法是音頻藍牙一顆料、數傳藍牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍牙、BLE 數傳和 MP3 本地播放三樣全包了。對藍牙音箱來說,最實在的好處就
    唯創知音語音芯片 2026-08-06 15:14 359瀏覽
  • 在前六期中,我們已經分別討論了 CRA 的適用范圍、整體影響、漏洞通報義務、風險評估與技術文檔證據鏈、第三方組件與 SBOM 供應鏈治理,以及產品上市后的支持期、安全更新、用戶說明和終止支持管理。到這里,企業已經能夠回答幾個核心問題:產品是否落入 CRA 適用范圍,產品由哪些組件構成,企業如何證明自己在設計、開發和上市前采取了必要的安全措施,以及產品上市后如何持續維護和安全下線。但對于真正準備落地 CRA 合規的企業來說,還有一個更現實的問題:CRA 的法規條文相對原則化,企業應當如何把“網絡安
    虹科云科技 2026-08-03 16:51 251280瀏覽
  • 樓宇自控里的“巴別塔”一棟智慧樓宇、一個產業園區里,暖通空調運行著廠商私有協議,照明系統遵循專屬通信標準,變配電、門禁安防各成體系——設備間數據壁壘森嚴,上位平臺對接全靠定制化 “翻譯” 開發,不僅成本高企,交付周期也難以管控。這就是樓宇自控行業多年的痛點:協議林立、封閉林立。而破局的鑰匙,早在30多年前就已經寫好了——BACnet。作為ASHRAE制定的樓宇自控國際標準協議,BACnet是如今全球樓宇自控系統(BAS)互聯互通的“通用語言”。新風機、冷源群控、變配電、照明、門禁,凡是需要被樓宇
    飛凌嵌入式 2026-08-10 09:26 192瀏覽
  • 導語在現代高速數字電路設計中,信號的完整性已不僅是理想波形推演,而是一場與物理非理想特性正面博弈的工程實踐。濾波器芯片作為凈化傳輸鏈路的關鍵屏障,其核心挑戰在于:能否有效識別并濾除那些隱匿在電平跳變過程中的亞納秒級瞬態脈沖干擾,這類干擾持續極短,卻足以在高速鏈路中引發誤觸發。然而,傳統函數發生器受限于采樣率與邊沿速率,根本無法忠實復現如此狹窄且陡峭的異常波形。針對此困境,德思特TS-AWG7000系列任意波形發生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態脈沖提供精細刻畫,配合SPG
    德思特測試測量 2026-08-05 14:06 5瀏覽
  • 在物聯網從“萬物互聯”邁向“萬物智聯”的進程中,LTE Cat.1憑借其在速率、成本與網絡覆蓋之間的完美平衡,正成為中低速物聯網市場的絕對主力。隨著2G/3G網絡的逐步退網以及新國標對終端設備智能化、定位功能的強制要求,Cat.1模組迎來了爆發式的增長窗口。在這一關鍵節點,基于華為海思Hi2131芯片設計的LTE Cat.1模組,憑借其在能效、射頻、架構及物理規格上的底層創新,成功打破了“高性能必高功耗”的傳統魔咒,為行業提供了極具競爭力的連接最優解。核心技術優勢:重塑Cat.1能效與連接標桿海
    用戶1778981989717 2026-08-05 21:04 199瀏覽
  • 一、方案簡介在Buildroot構建的嵌入式Linux系統中部署Flutter應用,主流有兩套成熟的開源方案,分別適配不同的顯示場景與開發需求:方案一:flutter-elinux(Sony開源方案)由索尼官方維護的嵌入式Linux Flutter工具鏈,既支持DRM/GBM直接渲染,也兼容Wayland、X11等多種顯示后端,場景適配性更廣。方案二:flutter-pi(輕量級嵌入器)一款輕量級Flutter引擎宿主程序,僅基于底層DRM/GBM接口實現渲染,無需依賴桌面環境,資源占用更低,更
    飛凌嵌入式 2026-08-07 09:34 150瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩定起振的成品,要經過十幾道精密工序。它內部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個生產過程里哪怕0.1微米的誤差,都會直接廢掉整批產品,這也是小尺寸晶振過去長期依賴進口,國內廠商花了十幾年才啃下量產硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 512瀏覽
  • 文:杜杰編輯:侯煜當地時間7月28日,美國特朗普政府落地最新科技封鎖政策,美國聯邦通信委員會(FCC)正式更新《受管制清單》,新增兩大類設備——境外生產的先進機器人設備、境外生產的聯網電力逆變器。FCC在官方情況說明書中明確,該類境外制造產品,“會對美國國家安全或美國民眾的人身安全構成無法承受的風險”。本次新規設置明確豁免機制:經美國國防部(DoW)、電力逆變器品類經美國國土安全部(DHS)審核并授予“有條件批準”,認定對應設備品類不存在重大安全風險,即可獲得準入豁免。同時政策嚴格執行新老劃斷原
    華爾街科技眼 2026-08-03 21:28 361瀏覽
  • 摘要東莞市恒創連接器有限公司(HCHGCONN)是位于廣東東莞的連接器源頭制造工廠,專注于連接器國產替代、小間距大電流連接器、線對板連接器、線對線連接器、板對板連接器、電源連接器及定制連接器開發。公司面向工業自動化、新能源儲能、BMS、汽車電子、AI服務器、GPU供電、通信設備、醫療設備和智能家居等場景,提供從產品選型、替代評估、樣品驗證到批量交付的一站式連接方案。恒創可支持 Molex、TE Connectivity、JST、Hirose、Samtec 等國際品牌部分系列的國產替代評估。常見替
    HC003 2026-08-07 10:14 155瀏覽
  • 讓微弱脈沖信號更清晰——鎖相放大器集成Boxcar平均器在脈沖激光、泵浦-探測、時間分辨光譜、飛行時間質譜等實驗中,真正需要測量的信號往往只出現在一個很短的時間窗口內,卻被淹沒在遠大于它的噪聲和背景之中。 針對這類穩定重復的微弱脈沖與瞬態信號,賽恩科儀為OE2052雙通道數字鎖相放大器帶來全新的Boxcar Averager功能升級:在鎖相檢測之外,進一步提供從周期波形觀察、門控測量到多周期平均的完整數字Boxcar測量鏈路。 Boxcar平均器,如何從噪聲中“截取”目標信號?Boxcar平均器
    SSI_賽恩科儀 2026-08-07 15:49 13475瀏覽
  • 產品使用18V供電,配套4串鋰離子電池,需要設計一個充電器。因為輸入18V,電池最高 16.8V,壓差僅 1.2V。因為壓差太小。使用開關型的充電控制芯片不穩定。嘗試自行設計一個。整體采用分立三極管 + TL431架構,分4個功能單元:使能控制回路、限流環路、TL431 精密恒壓反饋環路、PNP 功率管主功率輸出回路;實現完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經 R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導通,對地拉低 R1、R2 組成的分壓控制節點電位;該節點直
    southcreek 2026-08-07 13:45 468瀏覽
  • ?摘要:低價大流量卡正全面退市,政策收緊已成定局。面對傳統號卡的不確定性,隨身WiFi憑借穩定連接、多設備共享、獨立設備和靈活套餐等優勢,成為務實可靠的備選方案。1、流量卡黃金時代要結束了通信行業正迎來一場前所未有的“地震式”調整——曾讓無數用戶追捧的低價大流量卡,正在全速退出各大平臺。這早已不是一次普通的競合,而是一場趨勢性的行業洗牌?;赝^去,19元200G的神卡,那時真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及??扇缃?,回頭再看,那種
    愛上電路設計 2026-08-03 10:21 128971瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 212407瀏覽
  • 做電池供電攝像頭、可視門鈴、戶外安防的同學應該都踩過這個坑:攝像頭要拍,ISP、sensor、無線模塊全得開著,整機電流動輒幾百 mA。一節 18650 撐不了幾天,用戶投訴“怎么又沒電了”。有人會說:加個 PIR 人體紅外不就行了?問題是 PIR 怕熱、怕寵物、怕隔著亞克力/玻璃殼,而且只能感知“有溫差的人體移動”,靈敏度飄忽。真正省電的思路應該是:讓攝像頭平時徹底睡死,只有“前面有人/有動靜”時才被一鍵喚醒——而負責這個“看門”角色的,最合適的是一顆低功耗雷達。一、為什么是雷達,而不是 PI
    唯創知音語音芯片 2026-08-07 14:44 168瀏覽
我要評論
0
點擊右上角,分享到朋友圈 我知道啦
請使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 三年成全免费完整版电视剧 | 守望人妻电影| 中国远征军 下载| 酒店激战2第5集在线播放| 女子电影院情不自禁| 春雨在线观看全集高清免费播放| 啄木鸟系列壮志凌云满天星女版演员| 诺亚方舟:创世之旅| 博野县| 5G天天奭5G天天运动快点播| 单身即地狱第三季在线观看| 美国禁忌三| 神马电影达达免第九院| 葫芦兄弟大战蛇精在线观看| 维修师傅的艳遇| 海之谣 电视剧| 顶级人生第一季免费观看| 花甲房东真人版免费看| 上海流浪华姐图片| 球球大作战直播间| 北京青年优酷网| 撒旦有几个女儿| overflower在线观看 | 聊斋艳谈百度影音| 数码暴龙| 胶囊旅馆真人| 隐身女侠的电影免费观看| 废子夺嫡之强龙归来短剧免费观看| 牙狼garo 炎之刻印| 美国版《小蜜蜂》4| 胭脂霸王电视剧| 非诚勿扰百度影音| 高压监狱完整版| 需要爸爸的种子在线播放| 玩命派对| 《花子vs倔强驱魔师》的| 142分钟颐和园未删除版本| 昔闻洞庭水| 《游泳的秘密》真人版| 电视剧汶川故事| 新金银5—1手机版| 凶猛的办公室| 愁愁愁电视剧免费观看| 芈月传免费电视剧| 蝴蝶效应1| 律师堕落日本| 理想之城大结局| 仙踪大陆免费观看高清| 桃花劫电视剧| 微微一笑很倾城资源| 名侦探洪吉童| 我们是坏蛋理发师全集观看| 代号叫麻雀| 金银梅10全集免费播放| 家族荣誉4国语| 布兰妮不雅照| 私人教练1983年意大利| 电视剧理发师全集| 强心脏110524| 铜铜钢铿锵锵锵锵锵锵免费观看高清| 工地现超级大蟒蛇| 电视剧最美是你| 三年大片观看免费国语第一集| 粉碎机未删减| 河马打针后找饲养员求安慰| xl司第二季真人版| 开心超人| 智斗美女蛇| 聊斋艳谭五通神| 法航空姐3| 青春之歌在线观看| 我是哪吒 电影| 白峰电影在线观看免费版| 《给我钱 第12季》未删减 | 图书馆员第四季在线观看全集| 新继拇| 测试83| 苹果树下| 三年电影在线观看免费网| 你好儿科医生第三季免费观看| 英国纪录片《老二》| 3d肉蒲团女演员| 鸡油膏的功效与作用禁忌| 伦理《法国护士长》2006在线| 电影《蜜桃成熟时33d》| 怒火保镖电影| 黛比| 电视剧非亲姐妹在线观看| 电竞少女:带队拿冠军短剧全集| 和最讨厌的前男友一起去出差旅日剧| 快递员的特殊待遇| 火影剧场版7| 战狼9| 潜伏电视剧在线观看| 沧元图60完整版最新免费看| 电影《牙医郝板栗》免费观看| 人蛇欲血战之错体美女蛇| 活着迅雷下载| 《越南妹》99号电影在线观看免费| 神澜奇域无双珠动漫在线观看| 男模走秀| 斯巴达4最劲爆的一集| 未满十八岁禁入视频网站在线观看 | 《背叛老公的社长夫人》最新电影在线观看 -西瓜电影免费播放 -灵蓄影院 | 长安24集电视剧免费观看 | 麦乐迪 马克思主演女超人| 岳母幸福生活| 法网阻击全集| 美国的忌讳1-6| rio ed2k| 《女律师替夫还债》剧情介绍韩国电| 珠光宝气| 《被隔壁男人侵犯RBD-505》 | 但行好事短剧免费观看全集| 韩国男按摩| 大男当婚女主角| 快乐向前冲2013年度总决赛| 电影《年年有熊》免费观看| 教练把我压在方向盘上| 奇妙萌可之甜蜜捕获| 假面骑士时王免费观看完整版中文| 二十一世纪性格爱情指南免费观看 | 英雄儿女| 金瓶梅3d国语完整版| 人民的名义 电视剧| 无敌视频在线影院| 《倔强的驱魔师》1-4集| 惊天营救3免费观看完整| 晚安为我而眠的妹妹| 剧组的故事| 电视剧迷雾重重| 黑白配高清国语免费观看教程| 民主之澜| 上瘾第二季| 加勒比海盗女版1观看| 意大利电影巜丰满的欲妇| 熊出没之过年全集| 需要爸爸播种在线观看免费高清完整泰剧 | 趁人电影| 欧少女16集| 新还珠格格53集| 怒剑狂花| 菠萝蜜菠萝蜜影视在线观看 | 孤岛惊魂高清下载| 《需要爸爸种子》意大利| 侦察英雄电视剧在线观看| 战火中青春2| 台球高手电影满天星在线观看| 情爱游戏 韩国| 妻子3免费完整高清电视剧在线看| 360大佬爱上我第二季全集观看 | 《真实》崔雪莉多少秒出场| 爱丫爱丫兄妹在线影院电视剧,声声入| 九条的大罪全集观看| 陈星旭主演的电视剧| 朝国年经继拇6免费版| 深圳之恋电视剧免费完整版| 天使多美丽| 哇嘎电影免费高清在线 | 谍海计中计结局| 墨竹工卡县| 两小无猜:青梅竹马全集免费| 汉代风云人物之吕后| 梦精爱2在线观看| 男女愁愁愁愁免费观看| 电视剧《下海》| 苏桃的骚乱文肉np| 特邀外卖员电影| 夫妻二人世界免费观看第四季| 美容室的特殊待遇是4| 特殊的美容院5| 《子夜归》免费观看全集| 爱上直播军事| 兄弟的老婆| 喋血街头电影| 北京遇上西雅图之不二情书 电影| 美国爸爸播种电影在哪看 | 值得爱电影免费播放在线观看| 二连浩特市| 《旁观者》| 电影叶问4| 喜爱夜蒲3国语完整版| 赛仑《渔夫的妻子》| 文豪野犬第四季在线观看简体中文| 高清《家属2》动漫第一季免费观看 | 霹雳囧花 电影| 《部长来我家》日剧| 唐山大兄高清| 摔跤在线| 无双谱国语| 美味快递员特殊待遇2在线观看免费高清| 侏罗纪世界在线观看| 余秋雨经典语录| V酒店第一季完整版在线观看| 年轻的妈妈6中双字| 诚实好媳妇韩语中文谐音| 牙医姐妹在线电影播放完整版 | 那场雨爱上你泰剧在线观看| 沙漠风暴行动2007满天星| 《女人的秘密》电视剧| 网络第一美女| 张杰回应丁太升| 解说原片白峰美羽电影| 隔壁小蛙| 苦恼人的笑电影完整版| 韩国伦理水电工| 降妖伏魔之定海神针| 回响电视剧在线观看全集免费| 《交换夫婦》木下凛凛子在线播放| 高清《初入职场·金融季》 | 哭声 下载| 赢钱专家未删减版高清| 屠场呕吐娃娃手机免费看| 隐形人魔| 性生交大片免费看女人按摩| 黑白配在线观看免费播放| 鞋样设计| 我是刑警38集| 好色特工队iv| 生化危机惩罚| 热搜免费观看完整版电影| 我的章鱼老师| 武宁县| 女神枪手电视剧全集| 唐诗三百首一共有多少首诗| 隐私欲望完整版| 《美丽的小蜜桃5| 目光所及免费观看电视剧| 曾几何时的意思| 保姆的特殊待遇2| 魔女 电影| 全能奶爸不好惹免费版在线观看| 小凤新婚下集全集在线观看免费| 黑衣人2迅雷| 《四平青年》| 电视剧黑金地的女人| 羽月希正在播放| 陪看:孙颖莎王曼昱巅峰对决 | 早川濑里奈 金瓶梅| 《僵尸》| 农民伯伯下乡2国语版百度云在线看 | 法国满天星八尺夫人| 火蓝刀锋31集| 霹雳舞2| 《特殊的精油按摩》在线观看 | 丰年经继拇中文3与其他教材比较| 爆火短剧单亲妈妈| 哈利波特电影免费观看完整版| 浪客剑心动漫| 色莱芜视频在线| 杀手之王 美剧| 玫瑰之战电视剧免费全集在线观看| 漂亮的小姨韩剧免费观看| 中国在线观看免费播放 | 电影《爱我几何》| 彼岸灯塔| 赵丽娜回应直播崩溃痛哭| overflow樱花动漫第一季| 自由她们电影免费观看完整版| 猪猪侠动漫| 歌唱党的歌曲| 急诊护士电影完整版在线观看| 第一滴血2| 电视剧狂飙全集在线观看| 3对1初体4| 我的好妈妈6高清在线观看中文版| 农场主和他的三个女儿们| 单身老女人免费播放电视剧大全 | 命中注定我爱你20| 婚前试爱完整版| 人猿泰生Hr| 下一站是幸福免费观看| 蒙娜丽莎走下楼梯| 以瞄准我的妹妹| 屈辱的婚纱奴隷花嫁1~2集| 弹珠汽水猴子全集观看| 九九重阳今又重阳| 好妈妈中文6字开头| 小公主苏菲亚第三季2015| 《亢奋》| 人蛇大战国语| 回复术士真人版90集剧情介绍 | 启示录在线观看免费完整版高清| 云阳县| 午夜伦理小蜜桃| 大南迁全集在线观看| 欲海情魔无删减在线播放| 《over flow》原版| 金花瓶梅梅花2正片| 大胸女友在线| 电影《需要爸爸播种美国》演员名字| 武训传电影| 电视剧《下海》| 血战墓碑镇| 等不及在车里做一次核酸检测| 战狼10国语免费观看影视| 飞翔吧 战机少女| 瓜达卢佩的玫瑰在线免费观看| 青柠影视剧大全免费观看墨雨云间| 年轻善良的岳母| 班杰明下海| 售楼女的秘密在线观看| 《聊斋艳谭8陆判性经》| 特别酒店2日本索立信 | 吞噬星空动漫免费| 《驯服小峓子2》丽卡在线观看 | 女人私房话| 东京塔之越南女子别动队完整版| 上错花轿嫁错郎| 网络第一美女| 女特警电视剧2024免费播放| 法国《古墓丽影》| 射雕英雄外传三弄芙蓉是谁扮演的| 南京大屠杀| 小泽彻主演的《老板老板的要求》电影播放| 密宗双修每天四次| 超级鉴定师| 浙江一村庄突然涌现超多寻宝者| 《印尼空姐》免费观看完整版高清| 高清砖墙谜攻| 我的人间烟火电视剧免费下载| 正在播放: JUL-975 没有我丈夫的五天,我被命令禁欲到第一个晚上,我的性岳父对 | 酒店1-60集全集免费| 薛仁贵全集| 血战金沙滩| 国风按摩院在线播放免费观看最新章 | 《公的浮之手中字》免费| 河流如血| 天国的阶梯国语中文版| 野兽们的战争完整版免费在线观看| 插曲的痛30集全集免费播放百度云资源| 凹凸世界第四季全集免费| 电视剧扫毒全集在线观看| 《农场保卫战》满天星在线播放| 3d玉蒲完整版| 护国战神:卸甲归田当奶爸全集免费| 房间里的二人世界原声| 斗罗大陆2在线观看高清免费播放| 浴火之路在线观看| 去上司家拜访电影免费观看| 芈月传1至81全集免费观看| 巴黎初体验| 爱的初体验5电视剧全集在线播放 《被下药强辱的妻子》免费看 | 冲锋电影| 非常人贩主演是谁| 孩子今天妈妈给你| 电影《粉红大白菜》完整版 | 西西里的美丽传说国语在线观看| 山河明月全集在线播放| 我是特种兵3之狼牙| 横空出世电影| 正在播放 青楼名妓之桃花扇HD - 免费在线观看 | 鲨鱼影视 | 中文字Dl幕岳 在线观看| 家有虎妻| 包公奇案| 魔镜号在线观看完整版免费| 只对他乖| 金梅瓶1至5集免费观看| 日本战狼6免费观看完整版高清版| 皇后的品格免费观看完整版| 西关大少粤语高清| 三年免费观看在线观看大全第一集| 美国荷尔蒙免费观看高清| 第一次4电视剧免费观看| 韩国理伦片驯服小峓子豆瓣| 国家宝藏4| 亲爱的朋友们| 白嫖者联盟电影高清在| 圣石小子粤语| 正负之间电视剧在线观看完整版| 冰河世纪2快播| 被甩继承:亿万家产短剧全集| 荷兰空姐2019年上映的日本空姐是谁 | V酒店在线观看| 她姐姐的情事| 洪熙官 甄子丹| 微微一笑很倾城30集全集| 女超人2013麦乐迪| 豺狼计划下载| 速度与激情11| 希特勒回来了电影| 满天星麦乐迪电影在线观看完整免费 | 杨幂被挠脚心| 璀璨人生电视剧全集剧情介绍| 新十字街头| 朋友交换| 狼狈百度影音| 铁齿铜牙纪晓岚2| 日本金银1-5普通话| 即时是空3电影免费观看完整版国语| 奔腾年代在线观看| 《丰满的女学生3| 关上最后的门未增删樱花| 宫斗小能:从答应后全集免费| 富爸爸大预言| 维修师傅的艳遇2007金山丽林华华| 家庭教师199| 潘粤明版《昆仑神宫》在线播放| 挠痒痒脚心痒痒| 《十七种幻想》电影在线观看| 京都疑云主题曲| 大丈夫电视剧全集48| 最后99天电视剧全集在线观看| 王多鱼打扑克免费观看| 爱情悠悠药草香大结局| 我的后半生免费观看全集| 荔波县| 斯凯布鲁房产销售奇缘| 笨鸟先飞的故事| 凡人的品格电视剧全集在线观看| 我丰满的继牳3| 韩国 有求必应呼叫中心| 需要爸爸播种伦理电影| 冲出亚马逊高清电影| 女版战狼6欧式少女| 男女一起相愁愁愁在线观| 安斋拉拉躲雨电影在哪看| 《破.地狱》粤语在线播放| 美女一脱到底| 冰河世纪1国语版全集| 美国家庭式禁| 捡漏小能手:古玩街称霸全集免费| 伦理《法国护士长》高清电影| 硬汉1下载| 郝板栗在线观看| 美国忌讳1~7| 女女电影免费观看完整版大结局| 《束缚游戏》免费完整版在线观看| 坎贝奇无憾人生免费| 三日情劫:不嫁已婚总裁| 新雌雄大盗| 心花路放西瓜| 完美女仆法国满天星| 熊出没伴我熊芯完整版免费观看| 23部人禽伦交| 傲慢与偏见2005| 壮志凌云女版成人H版免费观看| 高清《朋友的妻子》5| 黄飞鸿之壮志凌云| 总会再相见全集观看| 吧唧吧唧电影免费观看| 南北兄弟| 云南虫谷电视剧免费观看完整版| 魔鬼恋人第一季免费观看| 侯玉洁牧师讲道的全部视频| 真心请按两次铃优酷| 秘密的爱| 我是刑警免费观看| 掌中之物西班牙版| 叶问电视剧粤语| 三叉戟2在线看| 小茴香苗| 罗丽星克莱尔在线| 今天河南法制频道节目| 85老版隋唐演义电视剧| 爱我几何原版无删减版| 笔仙惊魂百度影音| 不要和陌生人跳舞全集| abo动画成结模拟免费观看| 苏秦之楚翻译| 报告老板之豪言壮旅04| 傲慢与偏见2005| 爱唯侦察dvd免费观看| 启航:当风起时第二季| 小菊的春天在线观看| 不惑之旅一共多少集| 卖百科全书的女人电影在线观看| 赤警威龙在线观看| 最新凤凰军事观察室| 电影上位在线观看| 新金银悔6-10集的播出时间和角色| 努努秘密花园免费观看电视剧| 人头移植| 庭院女人| 电影《意大利夫人》在线观看| 《电影《千金与佣人》》| 被三个黑人折腾折惨叫| 王牌对王牌第三季| 天黑请闭眼电视剧| XXXX 美国| あんてきぬすっ中文在线| 恶作剧之吻1台湾版| 姐姐真漂亮高清BD| 壮志凌云满天星法版免费| 金太狼幸福生活电影| 杨馥宇变形计| 杀破狼3免费观看完整国语版| 八尺夫人免费观看全集完整版意大利 | 美和花园电影在线观看最新集数| 派对和谎言在线看| 高清《除却巫山》未删减版邓家佳| 快乐到死电影完整版百度影音| 下降头的电影| 杜拉拉升职记| 渔夫的荒野史记| 卡特教练| 布鲁纳瑟非斯丁| 需要爸爸播种孑伦理电影| 我的心里只有你没有他李宇春| 青梅竹马是消防员的动漫第一季 | 三眼神童主题曲| 东瀛鬼咒| 狗剩快跑全集在线免费观看| 马达加斯加的企鹅第二季| 《年轻的妈妈》| 《蛟龙行动》在线观看高清电影| 面包王子金卓求| 湿润的女邻居| 韩剧马医| 花样男子全集| 回复术士的重来人生13| 《刚结婚部长出差的日子》韩剧| 婶婶免费观看| 短剧难寻| j情丛林| 哥谭第三季在线观看免费完整版 | 激情從林| 时寒冰经济大棋局 | 壮志凌云电影女版2011| 浮生影视在线观看免费高清| 公主日记1免费观看完整版英语| 韩剧三姐妹| 女人的抗战 电视剧| 潼关县| 超人气校园| 365情| 无名川战役电影| overflower动漫第1集到第8集| 跨界歌王第三季| 保罗波茨| 电视剧拜托小姐| 酒店激战第5季更新时间| 暴躁老妈86集全免费观| 鼓楼外42集大结局| 好先生在线观看免费完整版| 韩剧太阳深处| 97年电影在线免费观看| 梅花红桃电视剧免费观看完整版 | 中国达人秀 卓君| 麻花MV在线看免费观看电视剧| 哪吒之魔童降世在线观看| 美国式家庭的忌忌5 | 片雾烈火| 奔跑吧兄弟白鹿h5部分1–5| 僵粤语在线观看免费全集| 女超人麦乐迪满天星免费观看完整版| 女人的战争 卑劣的交易| 致美丽的你韩剧免费观看全集| rosimm电视剧免费观看高清| 普京回应挥舞核大棒| 三个夜班医生玩弄护士| 《女超人-麦乐迪》| 我游泳女教练高清无码| 权力的游戏第一季免费观看完整| 《我的罪恶人生》| 学警雄心国语| 女儿国3在线观看免费版高清,挡不住的思念电影免费观看 | 幸福触手可及收电视剧| 狂暴巨兽2巨型昆虫| 真理与背叛| 公公之浮手中字5HD| 夺冠免费观看完整版| 杀生在线观看| 星汉灿烂电视剧高清免费观看全集| 保险公司推销员8中字手机| 七天妻子失去理智电影| 电影日本妈妈| 魔具少女| 楼上楼下1V2| 女版战狼19高清国语免费观看| 风风风韩剧原版| 中共八大元老| 绝对权力在线播放全集| 《炽热吸引》全集在线观看| 浪漫女家教黛比普通话版| 雌雄大盗| 春风燃情| 蒙面超人| 冰河剧集法国空姐4| 牧野诡事之卸岭力士| 爱我几何电影完整版高清免费观看| 隋唐演义严宽| 韩剧松药店的儿子们| 动漫《高柳家》1~6| 日和动画| 杨玉环电视剧| 东京塔越南战俘营在线看| 星辰变在线观看完整版免费观看| 电影月球漫步| 终极宿舍2| 难寻电视剧免费观看全集完整版| 凤姐qq| 女超人-麦乐迪版| 连续剧黑狐| 外交部新任发言人毛宁亮相| 开心公寓| 非人哉のエロ动漫| 天天想你电影免费观看全集| 末日袭击| 花宵道中电影全集免费观看| 阴阳眼见子全集观看| 甜美的咬痕动漫全集在线观看| 韩国金银梅| 粉碎机电影| 赵本山小品相亲| 何以为家| 紫菜汤和清蒸鱼哪个蛋白质高| 国风按摩院在线免费观看| 情满雪阳花电视剧免费观看全集| 打回原址电影| 神隐40集电视剧免费看| 和讨厌的部长出差电影| 沉静如海| 流行主教| 密爱 优酷| 大国手之棋行江湖| 妻子6免费完整版高清韩剧梦见别人家拉屎 | 东北小年| 17·3电影免费观看高清| 青春派 电影完整版| 亲爱的妈妈3高清| 情逆三世缘国语| 噼里啪啦国语版在线观看| 三个不道德的女人| 满天星电影在线| 玉蒲团3完整版高清| 赵薇不能和你分手| 大笑喜剧人| 奸岳| 蛇经常吐舌头是因为什么呢| 动动广场舞甩葱歌| 图书馆的女朋友日漫在线观看完整免费版电视剧第五集 | 王室教师海涅| 日韩做Aj的视频免费观看| 桃色凶器完整版| 死亡笔记动漫免费高清在线观看| 现在我们相爱吗| 美容室:待遇服务7在哪里看| 高清《大秦帝国》| 泽连斯基言论惹怒美国民众| 福贵免费在线观看| 免子先生第一季黄| 有朵云像你电影| 洪武大案全集| 1—5集普通话版免费下载| 双周一成| 鬼楼 林心如| 韶华若锦 电视剧| 莫妮卡主演电影| 赤子之心电视剧| 斗罗大陆 免费完整版| 赛仑《渔夫的妻子》1997| 中文版名侦探柯南全集| 泡芙小姐| 农家乐钓鱼| 战机风暴| 肉蒄之香| 纯情罗曼史动漫| 大地3资源在线高清免费| 男女愁愁愁全集在哪看| 黑执事第二季10| 我女朋友的母亲1完整视频有翻译 我知道你去年夏天干了什么 | 一又二分之一的夏天| 陈小春电影全集国语| 落魄贵族琉璃川在线观看全集高清免费普通话 | 四面佛电视剧15集完整版| 热辣滚烫电影免费观看| 目中无人谢苗电影在线观看| 出差被最讨厌的部长欺负电视剧 | 盗墓笔记杨洋版在线观看免费| 三大队电影免费观看| 电视剧沉香如屑免费观看完整版| 法国《爱上儿子》全集在线看| 《朋友夫妇:交换》3| 密战黑茶山| 白雪公主满天星| 盲爱千金短剧全集免费播放| xl司令动漫全集在线观看| 酒店第1-5集免费观看| 《娜塔莎》电影在线观看| 邵氏《金莲外传》免费观看全集| 星球大战3百度影音| 建议取消强制自动续费| 战狼999在线观看免费版高清| 帝皇侠大电影| 妖怪名单动漫| 爱在苍茫大地 电视剧| 曹查理《为卿痴狂》| 男生和女生一起愁愁愁在线观看| 我兄弟的母亲免费观看电视剧| 电视剧井冈山36集播放免费完整版| 熊出没·重启未来电影| 云南吃人| 锵锵锵完整版在线观看高清完整版| 毒液:致命守护者免费完整版高清 《主妇与装修工》大结局一木百子 | 八角笼中| 激情都市在线观看| 线人电影| 猛男受被CAO哭极限扩张SM| 搜索在线观看| 夏至未至免费观看| 销售的销售秘密3hd中字2017| 姐妹牙医高清完整版在线观看| 环太平洋百度影音高清| 高清器子未删减| xl司真人版在线播放免费| 怀旧酷狱忠魂下| 真相半白电视剧全集免费观看| 勇士vs独行侠 人情世故| 安斋拉拉出演电影免费版| 魔法少女☆伊莉雅| 张大大曝杨颖带妆睡觉| 《束缚游戏》第一季1-12集免费观看| 我的私人女教师3中文字幕版| 九霄龙帅电视剧全集| 黑狐之风影| 渔夫的妻子意大利赛仑| 斯巴达第四季10集完整版| 大山的女儿电视剧| 择君记电视剧在线观看完整版免费| 友人母在线播放BD高清| 做的时候粘腻的声音音频| 义姐是不是良妈妈动漫第集在线看全| 天天向上20120525| 上海上海电视剧| 人猿泰山1995版迅雷| 命运的捉弄| 《纯真年代的爱情》| 上海著名滑稽演员傅子明逝世 | 三打白骨精电影| 今晚油价将下调| 襄垣县| 玩偶姐姐在哪里看| 铁梨花剧情介绍| 布鲁克读大学满天星版| 冰河世纪2快播| 人之怒在线观看完整免费| 美女跳舞视频大全| 《越南暴行2》在线观看| 庙街豪情| 《黏黏糊糊的你》免费观看全集| 陷入热恋电视剧在线观看| 搞笑一家人韩国版百度影音| 朴妮唛28部电视剧在线观看 | 地心历险记2 720P| 粉碎机电影| 独步天下免费全集播放| 隔壁邻居很美味电影在线观看免费高清| 痞幼照片里的瓜| 男生和女生拔萝卜| 天地都在我心中| 善良的的瘦子| 唯我独神动漫在线观看国漫| 复仇者联盟2吉吉影音| 愤怒的黄牛韩剧电影| 韩剧闺蜜的背叛| 南京市| 吧唧吧唧电影免费观看| 猎狼特战队| 变形金刚二| 道师爷3电影在线观看完整版| 云水怒电视剧全集免费播放| 广安市| 郝板丽在线观看| psycho-pass第二季| 各国好声音| 魔乳秘剑帖全集| 南非掠夺者| 九河入海电视剧免费观看| XL司令全集在线观看免费| 游轮梦魇| 高压监狱3完整版在线看 | 嫦娥 电视剧| 《外出》免费观看完整| 大秦帝国在线| yellow高清视频在线免费观看 | 哈萨克阿肯弹唱| 男人女人愁愁在线观看电视剧| 搞笑版小猪佩奇| 追龙 粤语| 《延禧攻略》在线观看免费高清全集| 美女在线观看免费高清电视剧奔跑吧ep| 和尚的一场春梦| 拜托请爱我动漫完整版| 台版1987渔夫荒野史记在线观看| 空姐3完整版免费| 天龙八部2003| 陈庭妮主演的电视剧| 一人之下5| 国风按摩院1-5季顺序| 牧教师动漫樱花动漫全集剧情介绍| 红辣椒免费观看| 轮回的花瓣全集观看| 芳华解说| 金瓶梅2高清百度影音| 上位 微电影| 保罗保罗一家免费观看| 大肚孕妇2在线观看免费版高清| 景甜久违晒自拍| 韩国年轻的母年轻线在6| 《炽道》电视剧| 激战丛林hd版意大利| 乡村兵法| 成长的秘密高清观看完整版免费| 《家政老师》免费观看完整版视频| 温州仿真地图| 《裸乳按摩》在线| 《嘴唇》1981| 一路向西电影完整版52| 龙珠超116集| 秋瓷炫《生死决断》播放片段 | 凌晨三点看日本片好吗| 工地上的女人免费观看电视剧手机剧| 丽贝卡监狱电影免费完整观看| 玉观音孙俪| 韩剧宫s国语版全集| 痴人之爱电影在线观看| 干干人人| 张家界市| 千金肉奴隶在线观看| 免费网络电视| 鲁滨逊漂流记 电影| 狂欲的庄园| 玫瑰的故事电视剧在线| 非传统浪漫关系全集观看| 妻子当社长秘书偿还债| 北越暴行3全集在线播放| 日本游客在圆明园拍照被网红制止| 哎呀女朋友qvod| 猎场大结局| 逆转未来 彩蛋| 最牛村主任被打掉| 《家政老师》免费观看完整版视频 | 李晨电视剧| 为你我受冷风吹 胡彦斌| 二十四小时综艺| hd版泰山《激战丛林》完整版在线观看| 美国式禁忌1~4伦理灭火宝贝 | 墨白电视剧免费观看在线观看超清 | 梦断乐缘堂| 茶叶专卖店| 让子弹飞起来| 《家庭矛盾》麦乐迪欧美| 图书馆的女朋友免费动漫高清电视剧动漫第五集无广告 | 空姐3在线观看完整免费高清原声满天星奔跑吧ep | 走过柳源电视连续剧全集播放| 轧戏未删减| 西野翔作品番号| 善良的嫂子在线视频| 高清《美丽小蜜桃》1| 日同学的妈妈|