日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++语言编程规范

發布時間:2024/1/8 c/c++ 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++语言编程规范 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

前言

一、文件結構

1.1 版權和版本的聲明

1.2 頭文件的結構

1.3 頭文件依賴

1.4 包含文件的次序

1.5 目錄結構

二、程序的版式

2.1 空格還是制表位

2.2 空行

2.3 代碼行

2.4 代碼行內的空格

2.5 對齊

2.6 長行拆分

2.7 修飾符的位置

2.8 函數參數順序

2.9 預處理指令

2.10 類格式

2.11 命名空間格式化

三、命名規則

3.1 共性規則

3.2 簡單的 Windows 應用程序命名規則

?

四、表達式和基本語句

4.1 運算符的優先級

4.2 復合表達式

4.3 if 語句

4.4 循環語句的效率

4.5 for 語句的循環控制變量

4.6 switch 語句

4.7 goto 語句

五、函數設計

5.1 參數的規則

5.2 返回值的規則

5.3 函數內部實現的規則

5.4 使用斷言

5.5 其它建議

六、注釋

6.1 類注釋

6.2 函數注釋

6.3 注釋風格

七、其他編程經驗

7.1 引用參數

7.2 類型轉換

7.3 整型

7.4 預處理宏

7.5 0和NULL

7.6 sizeof( sizeof)

7.7 內存管理

7.8 一些有益的建議

前言

這里參考了《高質量C++C 編程指南 林銳》、《google C++編程指南》以及《華為C++語言編程規范》編寫了這份C++語言編程規范文檔,以合理使用 C++。

原文鏈接:https://www.cnblogs.com/linuxAndMcu/p/11303688.html

一、文件結構

每個 C++/C 程序通常分為兩個文件。一個文件用于保存程序的聲明(declaration),稱為頭文件。另一個文件用于保存程序的實現,稱為定義(definition)文件。

C++/C 程序的頭文件以 “.h” 為后綴,C 程序的定義文件以 “.c” 為后綴,C++ 程序的定義文件通常以 “.cpp” 為后綴(也有一些系統以 “.cc” 或 “.cxx” 為后綴)。

1.1 版權和版本的聲明

版權和版本的聲明位于頭文件的開頭,主要內容有:

1)版權信息;

2)文件名稱,標識符,摘要;

3)當前版本號,作者/修改者,完成日期;

4)版本歷史信息 。

/* * Copyright (c) 2019,google * All rights reserved. * * 文件名稱:fileName.h * 摘 要:簡要描述本文件的功能和用法 * * 當前版本:1.1 * 作 者:輸入作者(或修改者)名字 * 完成日期:2019 年 7 月 20 日 * * 取代版本:1.0 * 原作者 :輸入原作者(或修改者)名字 * 完成日期:2019 年 5 月 10 日 */

1.2 頭文件的結構

頭文件由三部分內容組成:

(1)頭文件開頭處的版權和版本聲明。
(2)預處理塊。
(3)函數和類結構聲明等。

【規則 1-2-1】為了防止頭文件被重復引用,應當用?ifndef/define/endif結構產生預處理塊或者#Pragma once

【規則 1-2-2】用?#include <filename.h>?格式來引用標準庫的頭文件(編譯器將從標準庫目錄開始搜索)。

【規則 1-2-3】用?#include “filename.h”?格式來引用非標準庫的頭文件(編譯器將從用戶的工作目錄開始搜索)。

【規則 1-2-4】頭文件中只存放 “聲明” 而不存放 “定義” 。

在 C++ 語法中,類的成員函數可以在聲明的同時被定義,并且自動成為內聯函數。這雖然會帶來書寫上的方便,但卻造成了風格不一致,弊大于利。建議將成員函數的定義與聲明分開,不論該函數體有多么小。

【規則 1-2-5】不提倡使用全局變量,盡量不要在頭文件中出現像?extern int value?這類聲明。

// 版權和版本聲明見示上例,此處省略。#ifndef GRAPHICS_H // 防止 graphics.h 被重復引用 #define GRAPHICS_H#include <math.h> // 引用標準庫的頭文件 … #include “myheader.h” // 引用非標準庫的頭文件 … void fun(…); // 全局函數聲明 … class Box // 類結構聲明 {… };#endif

1.3 頭文件依賴

【規則 1-3-1】使用前置聲明盡量減少 .h 文件中 #include 的數量。

當一個頭文件被包含的同時也引入了一項新的依賴 ,只要該頭文件被修改,代碼就要重新編譯。 如果你的頭文件包含了其他頭文件, 這些頭文件的任何改變也將導致那些包含了你的頭文件的代碼重新編譯。因此,我們寧可盡量少包含頭文件,尤其是那些包含在其他頭文件中的。

使用前置聲明可以顯著減少需要包含的頭文件數量。舉例說明:頭文件中用到類 File,但不需要訪問File的定義,則頭文件中只需前置聲明?class File;無需?#include "file/base/file.h"。

?

在頭文件如何做到使用類 Foo 而無需訪問類的定義?

1) 將數據成員類型聲明為 Foo *或Foo &;

2) 參數、返回值類型為 Foo的函數只是聲明(但不定義實現);

3) 靜態數據成員的類型可以被聲明為 Foo,因為靜態數據成員的定義在類定義之外。

?

1.4 包含文件的次序

【規則 1-4-1】將包含次序標準化可增強可讀性,次序如下: C庫、 C++庫、其他庫的.h、項目內的.h。

項目內頭文件應按照項目源代碼目錄樹結構排列,并且避免使用 UNIX文件路徑?.(當前目錄)和?..(父目錄)。例如,?google-project/src/base/logging.h?應像這樣被包含:#include "base/logging.h?。示例如下:

#include <sys/types.h> // C庫 #include <unistd.h> // C庫 #include <hash_map> // C++庫 #include <vector> // C++庫 #include "base/basictypes.h" // 其他庫的.h #include "base/commandlineflags.h" // 其他庫的.h #include "foo/public/bar.h //項目內的.h

1.5 目錄結構

【規則 1-5-1】如果一個軟件的頭文件數目比較多(如超過十個),通常應將頭文件和定義文件分別保存于不同的目錄,以便于維護。

例如可將頭文件保存于 include 目錄,將定義文件保存于 source 目錄(可以是多級目錄)。

如果某些頭文件是私有的,它不會被用戶的程序直接引用,則沒有必要公開其“聲明”。為了加強信息隱藏,這些私有的頭文件可以和定義文件存放于同一個目錄。

?

二、程序的版式

版式雖然不會影響程序的功能,但會影響可讀性。程序的版式追求清晰、美觀,是程序風格的重要構成因素。

可以把程序的版式比喻為“書法”。好的“書法”可讓人對程序一目了然,看得興致勃勃。差的程序“書法”如螃蟹爬行,讓人看得索然無味,更令維護者煩惱有加。 所以學習程序的“書法”, 很有必要。

2.1 空格還是制表位

只使用空格,每次縮進 4 個空格。有些人更加青睞每次縮進 2 個空格,也是可以的,這個純粹看個人喜好,但如果是團隊協作的話需要統一。

【規則 2-1-1】只使用空格進行縮進,不要在代碼中使用 tabs,設定編輯器將 tab 轉為空格。(有些編輯器已經這樣默認設置了,例如Qt)

2.2 空行

空行起著分隔程序段落的作用。空行得體(不過多也不過少)能將使程序的布局更加清晰。空行不會浪費內存,雖然打印含有空行的程序是會多消耗一些紙張,但是值得。所以不要舍不得用空行。

【規則 2-2-1】在每個類聲明之后、每個函數定義結束之后都要加空行。

【規則 2-2-2】在一個函數體內,邏揖上密切相關的語句之間不加空行,其它地方應加空行分隔。

while (condition) {statement1;// 空行if (condition){statement2;}// 空行statement3; }

2.3 代碼行

【規則 2-3-1】?一行代碼只做一件事情,如只定義一個變量,或只寫一條語句。這樣的代碼容易閱讀,并且方便寫注釋。

// 風格良好的代碼行 int width; // 寬度 int height; // 高度 int depth; // 深度// 風格不良的代碼行 int width, height, depth; // 寬度 高度 深度

【規則 2-3-2】?if、for、while、do 等語句自占一行,執行語句不得緊跟其后。 不論執行語句有多少都要加{}。這樣可以防止書寫失誤。

// 風格良好的代碼行 if (width < height) {doSomething(); }// 風格不良的代碼行 if (width < height) doSomething();

【建議 2-3-3】盡可能在定義變量的同時初始化該變量(就近原則)

如果變量的引用處和其定義處相隔比較遠,變量的初始化很容易被忘記。如果引用了未被初始化的變量,可能會導致程序錯誤。本建議可以減少隱患。例如 :

int width = 10; // 定義并初紿化 width int height = 10; // 定義并初紿化 height int depth = 10; // 定義并初紿化 depth

2.4 代碼行內的空格

【規則 2-4-1】關鍵字之后要留空格。像 if、for、while 等關鍵字之后應留一個空格再跟左括號 ‘(’,以突出關鍵字。

【規則 2-4-2】函數名之后不要留空格,緊跟左括號 ‘(’,以與關鍵字區別。

【規則 2-4-3】‘,’ 之后要留空格,如?fun(x, y, z)。如果 ‘;’ 不是一行的結束符號,其后要留空格,如?for (initialization; condition; update)。

【規則 2-4-4】賦值操作符、比較操作符、算術操作符、邏輯操作符、位域操作符,如 “=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”、“^” 等二元操作符的前后要加上空格。

【規則 2-4-5】一元操作符如 “!”、“~”、“++”、“--”、“&”(地址運算符)等前后不加空格。

【規則 2-4-6】像 “[]”、“.”、“->” 這類操作符前后不加空格。

【建議 2-4-7】對于表達式比較長的 for 語句和 if 語句,為了緊湊起見可以適當地去掉一些空格,如?for (i=0; i<10; i++)?和?if ((a<=b) && (c<=d))。

void fun(int x, int y, int z); // 良好的風格 void fun (int x,int y,int z); // 不良的風格if ((a>=b) && (c<=d)) // 良好的風格 if(a>=b&&c<=d) // 不良的風格for (i=0; i<10; i++) // 良好的風格 for(i=0;i<10;i++) // 不良的風格 for (i = 0; i < 10; i ++) // 過多的空格array[5] = 0; // 不要寫成 array [ 5 ] = 0; a.Function(); // 不要寫成 a . Function(); b->Function(); // 不要寫成 b -> Function();

2.5 對齊

【規則 2-5-1】程序的分界符 ‘{’ 和 ‘}’ 應獨占一行并且位于同一列,同時與引用它們的語句左對齊。

【規則 2-5-2】{ } 之內的代碼塊在 ‘{’ 右邊縮進后再左對齊。

// 良好的風格 void function(int x) {doSomething();other(); }// 不良的風格 void function(int x) {doSomething();other(); }

2.6 長行拆分

【規則 2-6-1】代碼行最大長度宜控制在 70 至 80 個字符以內。代碼行不要過長,否則眼睛看不過來,也不便于打印。

【規則 2-6-2】長表達式要在低優先級操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行適當的縮進,使排版整齊,語句可讀。

【規則 2-6-3】構造函數初始化列表過長,可以按 4 格縮進并排幾行。

// 良好的風格 if (theOneThing > ONE&& theThridThing == TWO&& yetAnother == LAST) {doSomething(); }// 良好的風格 MyClass::MyClass(int var): some_var_(var),some_other_var_(var + 1) {doSomething(); }

2.7 修飾符的位置

修飾符 * 和 & 應該靠近數據類型還是該靠近變量名,是個有爭議的話題。

若將修飾符 * 靠近數據類型,例如:int* x;?從語義上講此寫法比較直觀,即 x 是 int 類型的指針。

上述寫法的弊端是容易引起誤解,例如:int* x, y;?此處 y 容易被誤解為指針變量。雖然將 x 和 y 分行定義可以避免誤解,但并不是人人都愿意這樣做。

【規則 2-7-1】應當將修飾符 * 和 & 緊靠變量名。

// 良好的風格 char *name; int *x, y; // 此處 y 不會被誤解為指針

2.8 函數參數順序

【規則 2-8-1】定義函數時,參數順序為:輸入參數在前,輸出參數在后。

C/C++ 函數參數分為輸入參數和輸出參數兩種, 有時輸入參數也會輸出 (值被修改時)。
輸入參數一般傳值或常數引用 ,輸出參數或輸入/輸出參數為非常數指針 。

對參數排序時,將所有輸入參數置于輸出參數之前。不要僅僅因為是新添加的參數,就將其置于最后,而應該依然置于輸出參數之前。

2.9 預處理指令

【規則 2-9-1】預處理指令不要縮進,從行首開始。即使預處理指令位于縮進代碼塊中,指令也應從行首開始。

// 良好的風格 void main() {if (condition) { #if DISASTER_PENDING // GooddropEverything(); // 預處理指令中的程序仍然正常縮進 #endifbackToNormal();} }

2.10 類格式

【規則 2-10-1】類的聲明屬性依次序是public:、protected:、private:,都位于行首。除第一個關鍵詞(一般是public)外,其他關鍵詞前空一行。

class MyClass : public OtherClass { public:MyClass();~MyClass() {}void someFunction();void setSomeVar(int var) { m_someVar = var; }int someVar() const { return m_someVar; }protected:bool someInternalFunction();private: int m_someVar;int m_someOtherVar; }

2.11 命名空間格式化

【規則 2-11-1】命名空間內容不縮進。命名空間不添加額外縮進層次。

namespace { void foo() { // Correct. No extra indentation within namespace. ... }

注意:命名空間的左大括號可以在?namespace?所在一行,之間留一個空格。

三、命名規則

比較著名的命名規則當推 Microsoft 公司的“匈牙利”法,該命名規則的主要思想是“在變量和函數名中加入前綴以增進人們對程序的理解”。例如所有的字符變量均以 ch 為前綴,若是指針變量則追加前綴 p。

“匈牙利”法最大的缺點是煩瑣,例如:

int i, j, k; float x, y, z;

倘若采用“匈牙利”命名規則,則應當寫成:

int iI, iJ, ik; // 前綴 i 表示 int 類型 float fX, fY, fZ; // 前綴 f 表示 float 類型

如此煩瑣的程序會讓絕大多數程序員無法忍受。

據考察,沒有一種命名規則可以讓所有的程序員贊同,程序設計教科書一般都不指定命名規則。命名規則對軟件產品而言并不是“成敗悠關”的事,我們不要花太多精力試圖發明世界上最好的命名規則,而應當制定一種令大多數項目成員滿意的命名規則,并在項目中貫徹實施。

3.1 共性規則

本節論述的共性規則是被大多數程序員采納的,我們應當在遵循
這些共性規則的前提下,再擴充特定的規則。

【規則 3-1-1】標識符應當直觀且可以拼讀,可望文知意,不必進行 “解碼”。

標識符最好采用英文單詞或其組合,便于記憶和閱讀。切忌使用漢語拼音來命名。程序中的英文單詞一般不會太復雜,用詞應當準確。例如不要把 CurrentValue 寫成 NowValue。

【規則 3-1-2】命名規則盡量與所采用的操作系統或開發工具的風格保持一致。

例如 Windows 應用程序的標識符通常采用 “大小寫” 混排的方式,如 addChild。而 Unix 應用程序的標識符通常采用 “小寫加下劃線” 的方式,如 add_child。別把這兩類風格混在一起用。

【規則 3-1-3】程序中不要出現僅靠大小寫區分的相似的標識符。

int x, X; // 變量 x 與 X 容易混淆void foo(int x); // 函數 foo 與 FOO 容易混淆 void FOO(float x);

【規則 3-1-4】程序中不要出現標識符完全相同的局部變量和全局變量,盡管兩者的作用域不同而不會發生語法錯誤,但會使人誤解。

【規則 3-1-5】變量的名字應當使用“名詞”或者“形容詞+名詞”。

float value; float oldValue; float newValue;

【3-1-6】函數的名字應當使用“動詞”或者“動詞+名詞”(動賓詞組)。

drawBox(); // 普通函數 box->draw(); // 類的成員函數

【規則 3-1-7】用正確的反義詞組命名具有互斥意義的變量或相反動作的函數等。

int minValue; int maxValue;int SetValue(…); int GetValue(…);

【規則 3-1-8】盡量避免名字中出現數字編號,如 Value1,Value2 等,除非邏輯上的確需要編號。這是為了防止程序員偷懶,不肯為命名動腦筋而導致產生無意義的名字(因為用數字編號最省事)。

【規則 3-1-8】除非縮寫放到項目外也非常明確,否則不要使用縮寫。

// 良好的風格 int num_dns_connections; // Most people know what "DNS" stands for int price_count_reader; // OK, price count. Makes sense// 不良的風格 int wgc_connections; // Only your group knows what this stands for int pc_reader; // Lots of things can be abbreviated "pc"

3.2 簡單的 Windows 應用程序命名規則

作者對 “匈牙利” 命名規則做了合理的簡化,下述的命名規則簡單易用,比較適合于Windows 應用軟件的開發。

【規則 3-2-1】文件命名使用 “小駝峰命名法”,除第一個單詞之外,其他單詞首字母大寫。

lockScreenW.h changePasswdW.cpp

【規則 3-2-2】無論是普通函數還是成員函數的命名,都使用 “小駝峰命名法”,除第一個單詞之外,其他單詞首字母大寫。

// 普通函數 void setAge() { ... }// 成員函數 class MyClass { public:void setAge(int age); }

【規則 3-2-3】結構體、類型定義( typedef)、枚舉等所有類型,均使用 “大駝峰命名法”,所有單詞首字母大寫。

// classes and structs class UrlTable { ... struct UrlTableProperties { ...// typedefs typedef hash_map<UrlTable*, string> UrlTableMap;// enums enum UrlTableErrors { ...

【規則 3-2-4】變量和參數命名使用 “小駝峰命名法”,除第一個單詞之外,其他單詞首字母大寫。

bool flag; int drawMode;class MyClass : { private:string m_tableName; };

【規則 3-2-5】無論是宏常量還是普通常量的命名,都全用大寫的字母,用下劃線分割單詞。

// 宏常量 #define MAX_ARRAY_LEN 100// 普通常量 const int MAX_ARRAY_LEN = 100; const float PI = 3.14159;

【規則 3-2-6】如果不得已需要全局變量,則使全局變量加前綴 g_(表示global),即 “匈牙利+小駝峰命名法”。

int g_howManyPeople; // 全局變量

【規則 3-2-7】靜態變量加前綴 s_(表示 static),即 “匈牙利+小駝峰命名法”。

void init() {static int s_initValue; // 靜態變量 }

【規則 3-2-8】類的數據成員加前綴 m_(表示 member),即 “匈牙利+小駝峰命名法”,這樣可以避免數據成員與成員函數的參數同名。

void Object::SetValue(int width, int height) {m_width = width;m_height = height; }

【規則 3-2-9】枚舉值推薦全部大寫,單詞間以下劃線相連。

enum UrlTableErrors {OK = 0,ERROR_OUT_OF_MEMORY,ERROR_MALFORMED_INPUT, };

?

四、表達式和基本語句

表達式和語句都屬于 C++/C 的短語結構語法。它們看似簡單,但使用時隱患比較多。本節歸納了正確使用表達式和語句的一些規則與建議。

4.1 運算符的優先級

【規則 4-1-1】如果代碼行中的運算符比較多,用括號確定表達式的操作順序,避免使用默認的優先級。

word = (high << 8) | low if ((a | b) && (a & c))

4.2 復合表達式

如?a = b = c = 0?這樣的表達式稱為復合表達式。允許復合表達式存在的理由是:

(1)書寫簡潔;

(2)可以提高編譯效率。但要防止濫用復合表達式

【規則 4-2-1】不要編寫太復雜的復合表達式。

i = a >= b && c < d && c + f <= g + h ; // 復合表達式過于復雜

【規則 4-2-2】不要有多用途的復合表達式。

d = (a = b + c) + r ; // 該表達式既求 a 值又求 d 值。

4.3 if 語句

if 語句是 C++/C 語言中最簡單、最常用的語句,然而很多程序員用隱含錯誤的方式寫 if 語句。本節以 “與零值比較” 為例,展開討論。

【規則 4-3-1】不可將布爾變量直接與 TRUE、FALSE 或者 1、0 進行比較。

// 良好的風格 if (flag) // 表示 flag 為真 if (!flag) // 表示 flag 為假// 不良的風格 if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0)

【規則 4-3-2】整型變量與零值比較。

// 良好的風格 if (value == 0) if (value != 0)// 不良的風格 if (value) // 會讓人誤解 value 是布爾變量 if (!value)

【規則 4-3-3】不可將浮點變量用 “==” 或 “!=” 與任何數字比較。

// 良好的風格 if ((f>=-EPSINON) && (f<=EPSINON)) // EPSINON 是允許的誤差(即精度)// 不良的風格 if (f == 0.0) // 隱含錯誤的比較

【規則 4-3-4】應當將指針變量用 “==” 或 “!=” 與 NULL 比較。

// 良好的風格 if (p == NULL) // p 與 NULL 顯式比較,強調 p 是指針 if (p != NULL) // 不良的風格 if (p == 0) // 容易讓人誤解 p 是整型變量 if (p != 0) if (p) // 容易讓人誤解 p 是布爾變量 if (!p)

【規則 4-3-5】提倡 if 和左圓括號間保留一個空格,且不在圓括號中添加空格 。

// 良好的風格 if (condition) // if 和左圓括號間有個空格,且不在圓括號中添加空格 {... } else // 關鍵字else另單獨起一行 { ... }

4.4 循環語句的效率

C++/C 循環語句中,for 語句使用頻率最高,while 語句其次,do 語句很少用。本節重點論述循環體的效率。提高循環體效率的基本辦法是降低循環體的復雜性。

【規則 4-4-1】在多重循環中,如果有可能,應當將最長的循環放在最內層,最短的循環放在最外層,以減少 CPU 跨切循環層的次數。

// 低效率:長循環在最外層 for (row=0; row<100; row++) {for (col=0; col<5; col++ ){sum = sum + a[row][col];} }// 高效率:長循環在最內層 for (col=0; col<5; col++ ) {for (row=0; row<100; row++){sum = sum + a[row][col];} }

【規則 4-4-2】如果循環體內存在邏輯判斷,并且循環次數很大,宜將邏輯判斷移到循環體的外面。

// 效率低但程序簡潔 for (i=0; i<N; i++) {if (condition){doSomething();}else{doSomething();} } // 效率高但程序不簡潔 if (condition) {for (i=0; i<N; i++)doSomething();} else {for (i=0; i<N; i++)doSomething(); }

4.5 for 語句的循環控制變量

【規則 4-5-1】如不可在 for 循環體內修改循環變量,防止 for 循環失去控制。

【規則 4-5-2】建議 for 語句的循環控制變量的取值采用 “半開半閉區間” 寫法。

// (a)循環變量屬于半開半閉區間 for (int x=0; x<N; x++) {doSomething(); } // (b)循環變量屬于閉區間 for (int x=0; x<=N-1; x++) {doSomething(); }

示例 (a) 中的 x 值屬于半開半閉區間 “0 =< x < N”,起點到終點的間隔為 N,循環次數為 N。

示例 (b) 中的 x 值屬于閉區間 “0 =< x <= N-1”,起點到終點的間隔為 N-1,循環次數為N。

相比之下,示例 (a) 的寫法更加直觀,盡管兩者的功能是相同的。

4.6 switch 語句

【規則 4-6-1】switch 語句中的 case 塊可以使用大括號也可以不用, 取決于你的喜好。

【規則 4-6-2】如果有不滿足 case 枚舉條件的值,要總是包含一個 default(如果有輸入值沒有 case 去處理,編譯器將報警)。如果 default 永不會執行,可以簡單的使用assert。

switch (var) {case 0:{...break;}default: {assert(false);} }

4.7 goto 語句

自從提倡結構化設計以來,goto 就成了有爭議的語句。首先,由于 goto 語句可以靈活跳轉,如果不加限制,它的確會破壞結構化設計風格。其次,goto 語句經常帶來錯誤或隱患。它可能跳過了某些對象的構造、變量的初始化、重要的計算等語句,例如:

goto state; String s1, s2; // 被 goto 跳過 int sum = 0; // 被 goto 跳過 … state: …

如果編譯器不能發覺此類錯誤,每用一次 goto 語句都可能留下隱患。

很多人建議廢除 C++/C 的 goto 語句,以絕后患。但實事求是地說,錯誤是程序員自己造成的,不是 goto 的過錯。goto 語句至少有一處可顯神通,它能從多重循環體中咻地一下子跳到外面,用不著寫很多次的 break 語句。例如:

{ …{ …{ …goto error;}} }error: …

就象樓房著火了,來不及從樓梯一級一級往下走,可從窗口跳出火坑。所以我們主張少用、慎用 goto 語句,而不是禁用。

五、函數設計

函數是 C++/C 程序的基本功能單元,其重要性不言而喻。函數設計的細微缺點很容易導致該函數被錯用,所以光使函數的功能正確是不夠的。本節重點論述函數的接口設計和內部實現的一些規則。

5.1 參數的規則

【規則 5-1-1】參數命名要恰當,順序要合理。

例如編寫字符串拷貝函數 stringCopy,它有兩個參數。如果把參數名字起為
str1 和 str2,例如 :

void stringCopy(char *str1, char *str2);

那么我們很難搞清楚究竟是把 str1 拷貝到 str2 中,還是剛好倒過來。可以把參數名字起得更有意義,如叫 strSource 和 strDest。這樣從名字上就可以看出應該把 strSource 拷貝到 strDest。

還有一個問題,這兩個參數那一個該在前那一個該在后?參數的順序要遵循程序員的習慣。一般地,應將目的參數放在前面,源參數放在后面。 如果將函數聲明為:

void stringCopy(char *strSource, char *strDest);

別人在使用時可能會不假思索地寫成如下形式:

char str[20]; StringCopy(str, “Hello World”); // 錯誤,參數順序顛倒了

【規則 5-1-2】如果參數是指針,且僅作輸入用,則應在類型前加 const,以防止該指針在函數體內被意外修改。

void stringCopy(char *strDest,const char *strSource);

【規則 5-1-3】如果輸入參數以值傳遞的方式傳遞對象,則宜改用 “const &” 方式來傳遞,這樣可以省去臨時對象的構造和析構過程,從而提高效率。

【規則 5-1-4】避免函數有太多的參數,參數個數盡量控制在 5 個以內。如果參數太多,在使用時容易將參數類型或順序搞錯。

5.2 返回值的規則

【規則 5-2-1】函數名字與返回值類型在語義上不可沖突。

違反這條規則的典型代表是 C 標準庫函數 getchar。 例如:

char c; c = getchar(); if (c == EOF) …

按照 getchar 名字的意思,將變量 c 聲明為 char 類型是很自然的事情。但不幸的是 getchar 的確不是 char 類型,而是 int 類型,其原型為:int getchar(void);?。

由于 c 是 char 類型,取值范圍是 [-128,127],如果宏 EOF 的值在 char 的取值范圍之外,那么 if 語句將總是失敗,這種“危險”人們一般哪里料得到!導致本例錯誤的責任并不在用戶,是函數 getchar 誤導了使用者。

【規則 5-2-2】不要將正常值和錯誤標志混在一起返回。正常值用輸出參數獲得,而錯誤標志用 return 語句返回。

回顧上例,C 標準庫函數的設計者為什么要將 getchar 聲明為令人迷糊的 int 類型呢?他會那么傻嗎?

在正常情況下,getchar 的確返回單個字符。但如果 getchar 碰到文件結束標志或發生讀錯誤,它必須返回一個標志 EOF。為了區別于正常的字符,只好將 EOF 定義為負數(通常為負 1)。因此函數 getchar 就成了 int 類型。

我們在實際工作中,經常會碰到上述令人為難的問題。為了避免出現誤解,我們應該將正常值和錯誤標志分開。即:正常值用輸出參數獲得,而錯誤標志用return 語句返回。

函數 getchar 可以改寫成:

bool getChar(char *c);

雖然 gechar 比 GetChar 靈活,例如?putchar(getchar());?但是如果 getchar 用錯了,它的靈活性又有什么用呢?

【規則 5-2-3】有時候函數原本不需要返回值,但為了增加靈活性如支持鏈式表達,可以附加返回值。

例如字符串拷貝函數 strcpy 的原型:

char *strcpy(char *strDest,const char *strSrc);

strcpy 函數將 strSrc 拷貝至輸出參數 strDest 中,同時函數的返回值又是 strDest。這樣做并非多此一舉,可以獲得如下靈活性:

char str[20]; int length = strlen( strcpy(str, “Hello World”) );

【規則 5-2-4】函數返回時,return 表達式中不要使用圓括號。

return x; //not return(x);

5.3 函數內部實現的規則

不同功能的函數其內部實現各不相同,看起來似乎無法就“內部實現”達成一致的觀點。但根據經驗,我們可以在函數體的 “入口處” 和 “出口處” 從嚴把關,從而提高函數的質量。

【規則 5-3-1】在函數體的 “入口處”,對參數的有效性進行檢查。

很多程序錯誤是由非法參數引起的,我們應該充分理解并正確使用“斷言”(assert)來防止此類錯誤。 詳見 5.5 節“使用斷言”。

?

【規則 5-3-2】在函數體的“出口處”,對 return 語句的正確性和效率進行檢查。

如果函數有返回值,那么函數的“出口處”是 return 語句。我們不要輕視 return 語句。如果 return 語句寫得不好,函數要么出錯,要么效率低下。

注意事項如下:

(1)return 語句不可返回指向“棧內存”的“指針”或者“引用”,因為該內存在函數體結束時被自動銷毀。例如:

char * fun(void) {char str[] = “hello world”; // str 的內存位于棧上…return str; // 將導致錯誤 }

(2)要搞清楚返回的究竟是 “值”、“指針” 還是 “引用”。

5.4 使用斷言

程序一般分為 Debug 版本和 Release 版本,Debug 版本用于內部調試,Release 版本發行給用戶使用。

斷言 assert 是僅在 Debug 版本起作用的宏,它用于檢查“不應該”發生的情況。下例是一個內存復制函數。在運行過程中,如果 assert 的參數為假,那么程序就會中止(一般地還會出現提示對話,說明在什么地方引發了 assert)。

void *memcpy(void *pvTo, const void *pvFrom, size_t size) {assert((pvTo != NULL) && (pvFrom != NULL)); // 使用斷言byte *pbTo = (byte *) pvTo; // 防止改變 pvTo 的地址byte *pbFrom = (byte *) pvFrom; // 防止改變 pvFrom 的地址 while(size -- > 0 )*pbTo ++ = *pbFrom ++;return pvTo; }

為了不在程序的 Debug 版本和 Release版本引起差別,assert 不應該產生任何副作用。所以 assert 不是函數,而是宏。程序員可以把 assert 看成一個在任何系統狀態下都可以安全使用的無害測試手段。如果程序在 assert 處終止了,并不是說含有該 assert 的函數有錯誤,而是調用者出了差錯,assert 可以幫助我們找到發生錯誤的原因。

5.5 其它建議

【規則 5-5-1】函數的功能要單一,不要設計多用途的函數。

【規則 5-5-2】函數體的規模要小,盡量控制在 50 行代碼之內。

【規則 5-5-3】盡量避免函數帶有“記憶”功能。相同的輸入應當產生相同的輸出。

帶有“記憶”功能的函數,其行為可能是不可預測的,因為它的行為可能取決于某種“記憶狀態”。這樣的函數既不易理解又不利于測試和維護。在 C/C++語言中,函數的 static 局部變量是函數的“記憶”存儲器。建議盡量少用 static局部變量,除非必需。

【規則 5-5-4】不僅要檢查輸入參數的有效性,還要檢查通過其它途徑進入函數體內的變量的有效性,例如全局變量、文件句柄等。

六、注釋

C++語言中,程序塊的注釋常采用 “/*…*/”,行注釋一般采用 “//…”。注釋通常用于:

(1)版本、版權聲明;
(2)函數接口說明;
(3)重要的代碼行或段落提示。

雖然注釋有助于理解代碼,但注意不可過多地使用注釋。

6.1 類注釋

【規則 6-1-1】每個類的定義要添加描述類的功能和用法的注釋。

如果你覺得已經在文件頂部詳細描述了該類,想直接簡單的來上一句“完整描述見文件頂部”的話,還是多少在類中加點注釋吧。

如果該類的實例可被多線程訪問,使用時務必注意備注說明一下。

6.2 函數注釋

函數聲明處注釋描述函數功能,定義處描述函數實現。

函數聲明

【規則 6-2-1】函數聲明處的注釋,只描述函數功能及用法,而不會描述函數如何實現,因為那是定義部分的事情。

void setAge(int age); // 設置學生年齡

函數定義:

【規則 6-2-2】每個函數定義時要以注釋說明函數功能和實現要點,如使用的漂亮代碼、實現的簡要步驟、如此實現的理由等等。

不要從 .h 文件或其他地方的函數聲明處直接復制注釋,簡要說明函數功能是可以的,但重點要放在如何實現上。

/* * 函數介紹:設置學生年齡 * 函數實現:將參數age的值賦給成員變量m_age * 輸入參數:age-傳入的學生年齡值 * 返回值 :NULL * 注意事項:NULL */ void setAge(int age) {m_age = age; }

6.3 注釋風格

關于注釋風格,很多 C++ 的 coders 更喜歡行注釋, C coders 或許對塊注釋依然情有獨
鐘,或者在文件頭大段大段的注釋時使用塊注釋。

【規則 6-3-1】對于行注釋,注釋與?//?留一個空格,若是注釋在程序右側,則?//?與程序之間留一個空格。

// 注釋1 fun1();fun2(); // 注釋2

七、其他編程經驗

下面介紹一些使 C++ 代碼更加健壯的技巧和使用方式。

7.1 引用參數

【規則 7-1-1】按引用傳遞的參數必須加上 const。

void Foo(const string &in, string *out);

事實上這是一個硬性約定:輸入參數為值或常數引用,輸出參數為指針;輸入參數可以是常數指針,但不能使用非常數引用形參。

7.2 類型轉換

【規則 7-2-1】使用?static_cast<>()?等 C++ 的類型轉換,不要使用?int y = (int)x。

C 語言的類型轉換問題在于操作比較含糊:有時是在做強制轉換(如?(int)3.5),有時是在做類型轉換(如?(int)"hello")。另外, C++ 的類型轉換查找更容易、更醒目。

7.3 整型

【規則 7-3-1】C++ 內建整型中, 唯一用到的是 int, 如果程序中需要不同大小的變量, 可以使用<stdint.h>中的精確寬度的整型,如 int16_t。

<stdint.h> 定義了 int16_t、 uint32_t、 int64_t 等整型,在需要確定大小的整型時可以
使用它們代替 short、 unsigned long long 等。適當情況下,推薦使用標準類型如 size_t 和 ptrdiff_t。

最常使用的是,對整數來說,通常不會用到太大,如循環計數等,可以使用普通的 int。

7.4 預處理宏

【規則 7-4-1】使用宏時要謹慎,盡量以內聯函數、枚舉和常量代替之。

宏意味著你和編譯器看到的代碼是不同的, 因此可能導致異常行為, 尤其是當宏存在于全局作用域中。

值得慶幸的是, C++ 中,宏不像C中那么必要。宏內聯效率關鍵代碼可以用內聯函數替代; 宏存儲常量可以 const 變量替代; 宏“縮寫”長變量名可以引用替代;

下面給出的用法模式可以避免一些使用宏的問題,供使用宏時參考:

1) 可能被多個C++文件用到的宏定義,一般都放在頭文件中(.h),如果只需被一個文件所用,放在 .cpp 或 .h 里面都可以;

2) 使用前正確 #define,使用后正確 #undef。

7.5 0和NULL

【規則 7-5-1】整數用0,實數用0.0,指針用NULL,字符(串)用'\0'。

7.6 sizeof( sizeof)

【規則 7-6-1】盡可能用 sizeof(varname) 代替 sizeof(type)。

使用 sizeof(varname) 是因為當變量類型改變時代碼自動同步,有些情況下 sizeof(type) 或許有意義,還是要盡量避免,如果變量類型改變的話不能同步。

Struct data; memset(&data, 0, sizeof(data)); //Good - 變量類型改變時,代碼自動同步 memset(&data, 0, sizeof(Struct)) //Bad - 變量類型改變時,代碼不會自動同步

7.7 內存管理

【規則 7-7-1】用 malloc 或 new 申請內存之后,應該立即檢查指針值是否為 NULL。防止使用指針值為 NULL 的內存。

【規則 7-7-2】不要忘記為數組和動態內存賦初值。防止將未被初始化的內存作為右值使用。

【規則 7-7-3】動態內存的申請與釋放必須配對,防止內存泄漏。

【規則 7-7-4】用 free 或 delete 釋放了內存之后,立即將指針設置為 NULL,防止產生 “野指針”。

7.8 一些有益的建議

【規則 7-8-1】當心那些視覺上不易分辨的操作符發生書寫錯誤。

我們經常會把 “==” 誤寫成 “=”,象 “||”、“&&”、“<=”、“>=” 這類符號也很容易發生 “丟 1” 失誤。然而編譯器卻不一定能自動指出這類錯誤。

【規則 7-8-2】變量(指針、數組)被創建之后應當及時把它們初始化,以防止把未被初始化的變量當成右值使用。

【規則 7-8-3】當心數據類型轉換發生錯誤。盡量使用顯式的數據類型轉換(讓人們知道發生了什么事),避免讓編譯器輕悄悄地進行隱式的數據類型轉換。

【規則 7-8-4】當心變量發生上溢或下溢,數組的下標越界。

【規則 7-8-5】當心忘記編寫錯誤處理程序,當心錯誤處理程序本身有誤。

【規則 7-8-6】如果原有的代碼質量比較好,盡量復用它。但是不要修補很差勁的代碼,應當重新編寫。

【規則 7-8-7】盡量使用標準庫函數,不要“發明”已經存在的庫函數。

【規則 7-8-8】盡量不要使用與具體硬件或軟件環境關系密切的變量。

【規則 7-8-9】把編譯器的選擇項設置為最嚴格狀態。

總結

以上是生活随笔為你收集整理的C/C++语言编程规范的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

五月婷婷在线观看视频 | 免费欧美精品 | 国产韩国日本高清视频 | 久久精品三级 | 国产精品免费视频观看 | 丁香视频免费观看 | 色视频国产直接看 | 久草在线最新免费 | 国产丝袜 | 国产精品影音先锋 | 久久精品国产v日韩v亚洲 | 久久综合亚洲鲁鲁五月久久 | 在线观看免费一级片 | 日本三级吹潮在线 | 亚洲成人精品在线 | 日韩视频免费在线 | 91福利视频一区 | 国产精品一区二区三区电影 | 香蕉网在线 | 国产免费一区二区三区网站免费 | 国产青青青 | 久久久免费观看完整版 | 91亚洲欧美激情 | 亚洲mv大片欧洲mv大片免费 | 日韩在线视频免费看 | 色99之美女主播在线视频 | av免费网页 | 午夜av在线电影 | 日本丰满少妇免费一区 | 爱色av.com| 久久美女免费视频 | 国产精品高清免费在线观看 | 免费又黄又爽 | 久久久高清一区二区三区 | 黄色a在线| 天天婷婷| 91视频在线观看免费 | 一级黄色在线免费观看 | 日韩免费观看视频 | 精品999| 日韩女同av| 91精品办公室少妇高潮对白 | 日韩在线观看一区二区 | 丝袜一区在线 | 国产美女视频免费观看的网站 | 五月婷婷婷婷婷 | 99精品在线观看视频 | 国产精品网红直播 | 午夜av电影院 | 免费成人黄色片 | 国产91对白在线 | 成人污视频在线观看 | 国产精品日韩在线播放 | 久草精品免费 | 91麻豆精品国产91久久久久久久久 | 久久精品免视看 | 国产色 在线 | 日韩sese | 亚洲一二三久久 | 一级性视频 | 奇米影视8888在线观看大全免费 | 成人av片免费观看app下载 | 香蕉久久久久久久 | 在线电影日韩 | 久久福利| 欧洲一区精品 | 久久久国产毛片 | 精品91 | 国产小视频免费在线观看 | 日韩在线观看影院 | 欧美国产精品一区二区 | 99视频| 日韩欧美精品一区二区三区经典 | 国产高清av免费在线观看 | 永久免费精品视频网站 | 国产精品video爽爽爽爽 | 人人射人人射 | 国产精品久久一区二区三区不卡 | 国产一区二区三区在线 | 天天操天天操天天操天天操 | 免费观看久久 | av片中文字幕 | 欧美精品在线一区 | 97电影院网| 亚洲成人精品 | 91黄色在线观看 | 黄在线免费看 | 婷婷激情在线 | 久黄色 | 十八岁以下禁止观看的1000个网站 | 欧美性久久久久久 | 亚洲精品综合在线观看 | av在线播放中文字幕 | 在线免费黄网站 | 成人av日韩| 亚洲六月丁香色婷婷综合久久 | 黄色在线免费观看网址 | 成人丝袜 | 国产成人免费 | 69视频国产 | 日韩久久一区二区 | 精品亚洲一区二区三区 | 999久久久久久久久 69av视频在线观看 | 韩日电影在线观看 | 天天弄天天干 | 色婷婷亚洲综合 | 黄色片网站av | 黄色一集片| 女人18毛片a级毛片一区二区 | 国产aa精品 | 91av资源在线| 国产精品一区二区av影院萌芽 | 久久视频在线免费观看 | 国产又粗又猛又黄又爽 | 日本三级久久久 | av大片免费看| 在线看一区二区 | 中国一区二区视频 | 久久ww| 精品在线视频一区二区三区 | 国产视频二区三区 | 国产高清精品在线 | www.黄色| 久草在线免费色站 | 91免费黄视频| 成年人视频在线观看免费 | 99视频精品免费视频 | 97理论电影 | 国产视频97 | 婷婷夜夜| 免费在线色 | 国产在线观看xxx | 久久在线观看视频 | 91精品国产入口 | 亚洲黄色区 | 91麻豆精品国产91久久久无需广告 | 黄污视频网站大全 | 一区二区三区四区免费视频 | 日本久久免费视频 | 日韩美视频 | 福利视频第一页 | 丁香高清视频在线看看 | 欧美日韩不卡在线视频 | 欧洲视频一区 | 91大神电影 | 欧美一区二区在线刺激视频 | 国产午夜精品一区二区三区欧美 | 日韩激情三级 | 国产在线精 | a国产精品| 人人干天天干 | www五月天com | 亚洲女欲精品久久久久久久18 | 天天爽天天爽夜夜爽 | 黄色小网站在线观看 | 在线视频1卡二卡三卡 | 成人免费视频网站 | av福利第一导航 | 高清久久久久久 | 超碰免费在线公开 | 欧美性免费 | 欧美国产日韩一区二区 | 青草视频在线 | 亚洲午夜精品在线观看 | 亚洲黄色av网址 | 伊甸园av在线 | 天天爽人人爽 | 99精品免费久久久久久久久日本 | 在线观看视频日韩 | 福利一区二区 | 91精品一区国产高清在线gif | 99热在线观看 | 色网站免费在线看 | 成人h电影 | 91日韩在线视频 | 日韩免费不卡av | 国产99一区视频免费 | 91禁在线观看 | 色激情五月 | 国内精品国产三级国产aⅴ久 | 欧美日韩免费视频 | 最新中文字幕在线资源 | 在线国产视频一区 | 少妇性色午夜淫片aaaze | 在线观看91视频 | 成人毛片在线观看 | 在线观看一二三区 | 就色干综合| 国产精品一区二区视频 | 久久久精品国产免费观看一区二区 | 激情欧美丁香 | 国产91免费看 | 久久艹在线观看 | 婷婷六月天天 | 国产精品a成v人在线播放 | 91高清完整版在线观看 | 免费看一级特黄a大片 | 国产91国语对白在线 | 97在线观看免费观看高清 | 久久人人爽爽人人爽人人片av | 97伊人网| 久久精品一区二区三 | 日韩欧在线 | 激情五月色播五月 | 激情丁香在线 | 午夜精品麻豆 | 日日夜夜国产 | 成人在线观看免费视频 | 婷婷色网站 | 欧美ⅹxxxxxx | 国内精品久久久久久久久久清纯 | 婷婷六月天丁香 | 伊人天堂av | 国产亚洲va综合人人澡精品 | 色婷婷成人 | 久久视频 | 中文字幕av电影下载 | 91精品国产自产在线观看 | 亚州欧美精品 | 久久成人午夜视频 | 欧美色就是色 | 网站在线观看你们懂的 | 国产精品网在线观看 | 免费黄色在线网站 | 最近中文字幕国语免费高清6 | 综合中文字幕 | 99免费在线播放99久久免费 | 日韩欧美在线免费观看 | 四虎亚洲精品 | 久久99亚洲精品久久 | 久久精品屋 | 欧美一级片在线播放 | 免费黄色av.| 97视频免费在线观看 | 亚洲人人爱 | 日韩成年视频 | 九九日韩 | 人人爱人人射 | 成人动漫精品一区二区 | 亚洲乱码精品久久久 | 丁香色婷婷 | 丁香激情五月婷婷 | 欧美色综合 | 黄色免费网站大全 | 911久久| 日韩免费视频播放 | 日韩高清二区 | 91九色精品| aaa日本高清在线播放免费观看 | 免费a v在线 | 国产区精品视频 | 日日爽视频 | 亚洲专区视频在线观看 | 久久黄色免费 | 国产精品嫩草影院123 | 久久精品黄 | 视频一区二区三区视频 | a天堂最新版中文在线地址 久久99久久精品国产 | www.五月天色| av千婊在线免费观看 | 99高清视频有精品视频 | av理论电影| 久久精品视频播放 | 99久久精品免费 | 色资源中文字幕 | 久久免费视频在线 | 国产成人黄色 | 四虎天堂| 在线免费av观看 | 亚洲成人免费在线 | 九九热精品视频在线播放 | 日韩在线视频免费看 | 成人a免费视频 | 一级黄色av | 久久精品网站免费观看 | 中文字幕一区在线 | 国产成人在线观看免费 | 久久男人中文字幕资源站 | 亚洲精欧美一区二区精品 | 麻豆免费视频观看 | 久久综合九色综合97_ 久久久 | 久久伊人五月天 | 天天爱天天操 | 日韩精品专区 | 免费日韩一区 | 久久 精品一区 | 在线成人免费 | 国产精品免费成人 | 国产精品自在线 | 免费人人干 | 日本激情视频中文字幕 | 日韩视频三区 | 久久精品国产一区二区三区 | 久久男人视频 | 黄色av网站在线观看 | 国产成人一区二区在线观看 | 日韩激情小视频 | 99精品在线免费观看 | 亚洲黄色小说网址 | 日韩欧美aaa | 日本中文在线 | 一级黄色大片在线观看 | 久久久久久激情 | 亚洲精品乱码久久久久久蜜桃不爽 | 日韩在线观看中文 | 最新av在线网站 | 国产专区一 | 最新一区二区三区 | 一区二区视频在线免费观看 | 国产美女视频免费观看的网站 | 日韩女同一区二区三区在线观看 | 人人爱人人做人人爽 | 亚洲最大av网 | 久久精品99国产精品日本 | av中文字幕不卡 | 日韩久久久 | 久久狠狠干 | 四虎在线免费观看 | 日韩艹| av福利在线 | 韩国av电影网 | 久久精品综合 | 国产成人香蕉 | 日日弄天天弄美女bbbb | 中文字幕一区二区三区精华液 | 97在线观看免费视频 | 亚洲精品一区二区在线观看 | 国产美女免费观看 | 97天天干 | 精品国产成人av在线免 | 99热这里有 | 国产一级二级在线播放 | 欧美二区视频 | 日日综合 | 日韩视频免费在线 | 8x成人在线 | 美女在线观看av | 天天色天天搞 | 最近能播放的中文字幕 | 在线午夜av| 亚洲爱爱视频 | 国产又黄又硬又爽 | 手机av网站| 97精品视频在线播放 | 奇米影视777影音先锋 | 最新超碰在线 | 国产精品久久久久久久7电影 | 99热在线这里只有精品 | 中文字幕色播 | 国产麻豆精品在线观看 | 国产一区二区不卡视频 | a√天堂中文在线 | 成人97人人超碰人人99 | 99热在线这里只有精品 | 国产精品video爽爽爽爽 | 日韩精品一区二区电影 | 9999在线| 国精产品999国精产 久久久久 | 久久久精品电影 | 911精品美国片911久久久 | 日本成人免费在线观看 | 欧洲色综合 | 中文字幕欲求不满 | 91九色视频国产 | 不卡av在线免费观看 | www色网站| 天天曰夜夜操 | 五月天婷婷综合 | 成人免费电影 | 成年人在线免费看视频 | 激情在线五月天 | 国产精品免费一区二区三区在线观看 | 在线视频观看国产 | 日韩电影一区二区在线 | 久久成人在线视频 | 国产又粗又猛又黄视频 | 最近更新的中文字幕 | sm免费xx网站 | 精品一区二区免费视频 | www黄色com | 91成人黄色 | 国产精品av在线 | 亚洲精品91天天久久人人 | 久久国产精品视频 | 欧美做受高潮1 | 日日爽视频 | 免费精品国产 | 久久精品国产免费看久久精品 | 人人舔人人爽 | 午夜国产一区二区 | 丁香婷婷在线 | 亚洲精品美女在线观看播放 | 日韩在线一区二区免费 | 在线精品国产 | 激情综合电影网 | 欧美在线日韩在线 | 91豆花在线 | 黄色三级免费网址 | 色综合天天爱 | 色姑娘综合 | 中文字幕视频网站 | 黄在线免费看 | 色婷婷成人网 | 国产亚洲综合在线 | 亚洲伊人成综合网 | 色福利网| 91成人看片| 中文字幕久久精品一区 | 亚洲精品视频中文字幕 | 青青河边草免费直播 | 四虎影视8848aamm | 在线观看岛国片 | 久久天天躁夜夜躁狠狠躁2022 | 丁香五香天综合情 | 国产一级片视频 | 久久综合狠狠 | av视屏在线播放 | 婷婷激情av | 夜色成人av| 精品国产免费人成在线观看 | 最新高清无码专区 | 欧美片一区二区三区 | 99精品视频在线播放观看 | 国产丝袜| 国产精品系列在线播放 | 欧美精品久久久久久久免费 | 91成人精品 | 狠狠狠色丁香婷婷综合久久五月 | 国产破处在线视频 | 久久久久国产精品免费 | 99久久精品久久久久久动态片 | 一区二区三区电影在线播 | 精品少妇一区二区三区在线 | 国产精品激情偷乱一区二区∴ | 99这里只有精品视频 | 一区二区三区在线观看免费视频 | 国产精品成人a免费观看 | 久久久久久久久久久网 | 日产乱码一二三区别在线 | 精品国产99国产精品 | 亚洲一级性 | 欧美高清视频不卡网 | 久久久久福利视频 | 性色视频在线 | 久久综合中文色婷婷 | 国产免费黄视频在线观看 | 中文乱幕日产无线码1区 | 中文字幕在线视频一区二区 | 91视频 - x99av | 亚洲精品视频观看 | 日本黄区免费视频观看 | 日日弄天天弄美女bbbb | 日韩免费播放 | 久久国产午夜精品理论片最新版本 | 日韩在线观看中文 | 久视频在线 | 99精品国产在热久久 | 国产精品网红直播 | 91大神电影 | bbb搡bbb爽爽爽| 五月开心综合 | 美女网站色免费 | 免费在线国产视频 | 91香蕉国产| 又粗又长又大又爽又黄少妇毛片 | 国内精品视频在线 | 97成人在线视频 | 91爱看片 | 欧美日韩国产页 | 日韩黄色免费电影 | 99热在线这里只有精品 | 国产午夜av | 五月婷婷在线播放 | 日韩视频一二三区 | 99夜色| 免费在线观看日韩 | 在线观看免费版高清版 | 日韩久久精品一区二区三区 | 久草在线资源网 | 精品国产乱码久久久久久久 | 手机av片 | 久久国产午夜精品理论片最新版本 | 精品综合久久 | 国产精品丝袜在线 | a在线播放 | 国产精品女 | 中文字幕在线视频一区 | 日韩在线理论 | 日韩精品一区二区在线视频 | 97在线超碰 | 欧美视频不卡 | 色综合久久久久久久久五月 | 国产中文字幕av | 中文字幕视频在线播放 | 久久久久国产精品一区 | 免费在线a | 久久艹99| 中文字幕精品一区二区三区电影 | 亚洲精品乱码久久久久久久久久 | 久久免费在线视频 | 欧美福利精品 | 国产精品久久久久久电影 | 国产精品理论片在线观看 | 精品毛片一区二区免费看 | 精品久久久久国产免费第一页 | 激情五月综合网 | 欧美日韩免费一区二区三区 | a在线一区 | 欧美一级裸体视频 | 日韩成人精品一区二区 | www.久久91| 久久精品中文字幕一区二区三区 | 亚洲精品午夜久久久 | 午夜婷婷在线观看 | 欧美成人精品三级在线观看播放 | 欧美一区中文字幕 | 99视频在线免费看 | 奇米网网址 | 在线国产福利 | 亚洲国产中文在线观看 | 中文av在线天堂 | 中文字幕在线观看一区二区 | 国产乱码精品一区二区三区介绍 | 9999在线| 91三级在线观看 | 最近最新中文字幕 | 亚洲成人黄色在线观看 | 久久不射电影网 | 成人av一区二区在线观看 | 精品999国产| 国产视频一二三 | 蜜臀av性久久久久av蜜臀妖精 | 99久在线精品99re8热视频 | 日韩综合视频在线观看 | 亚洲一区二区天堂 | 日本高清免费中文字幕 | 伊人色**天天综合婷婷 | 五月天视频网站 | 你操综合 | 日韩视频一区二区三区 | 日本久久久久久科技有限公司 | 成年人三级网站 | 色婷婷综合五月 | 激情网在线观看 | 日韩毛片精品 | 91精品天码美女少妇 | 91av视频免费在线观看 | 性色av免费在线观看 | 色欧美88888久久久久久影院 | 天天天干天天射天天天操 | 久久久影院一区二区三区 | 国产成人一区二区在线观看 | 久久精品99国产精品亚洲最刺激 | 国产我不卡 | av电影在线免费观看 | 色综合久久精品 | 国产在线观看免费av | 中文字幕免费观看全部电影 | 久久99精品热在线观看 | 五月婷婷av | 久久久久久综合 | 久久久免费看视频 | 亚洲婷婷综合色高清在线 | 美女黄频免费 | 最新超碰 | 欧美日韩免费一区二区三区 | 国产精品久久久久久妇 | 91精品视频在线 | 一区二区精 | 久久99精品久久久久久久久久久久 | 日韩高清不卡一区二区三区 | 在线观看免费视频 | 亚洲专区在线播放 | 波多野结衣资源 | 97超级碰碰 | 91桃色视频 | 久青草国产在线 | 欧美视频日韩视频 | 欧美午夜剧场 | 亚洲精品国产日韩 | 性色av一区二区三区在线观看 | 欧美韩国在线 | 亚洲免费视频在线观看 | 国产精品夜夜夜一区二区三区尤 | 99精品国产高清在线观看 | 日韩一区二区三区在线观看 | 国产精品精品国产 | 欧美日韩亚洲精品在线 | 日韩中文字幕第一页 | 久久精品国产免费 | 久久久精华网 | 久草在线综合 | 99视频免费播放 | 一级黄色片在线观看 | 在线一区av | 日韩二区在线播放 | 99热精品视 | 9幺看片 | 在线免费观看羞羞视频 | 日韩乱色精品一区二区 | 久久夜色精品国产欧美一区麻豆 | 91精品久久久久久 | 国产精品第72页 | 久久久99国产精品免费 | 午夜免费福利视频 | 精品一区三区 | 久久国际影院 | 成人免费观看视频大全 | 欧美日韩视频在线一区 | 在线免费av播放 | 精品在线一区二区三区 | 亚洲综合欧美激情 | 成人av教育 | 免费成人在线电影 | 人人爱人人爽 | av亚洲产国偷v产偷v自拍小说 | 国产91精品久久久久久 | 美女视频免费精品 | 久久国产精品系列 | 国产精品成人一区二区三区吃奶 | 99热最新地址 | 国产三级在线播放 | 国产麻豆精品一区 | 91喷水| 国产99久久久国产精品成人免费 | 粉嫩av一区二区三区入口 | 精品久久网站 | 激情av综合| 亚洲国产中文字幕在线视频综合 | 日韩国产高清在线 | 国产涩涩网站 | 日本深夜福利视频 | 亚洲91精品在线观看 | 国产高清视频网 | 国产精品成人一区二区三区吃奶 | 天天噜天天色 | 日韩资源在线播放 | 婷婷激情影院 | 国产精品久久久久婷婷二区次 | 久久国产免费 | 开心婷婷色 | 国产99爱 | 国产在线一区二区 | 国产v视频 | 免费av的网站 | 成人av久久 | 日日草视频 | 91中文字幕一区 | 欧美一级片在线免费观看 | 国产精品久久综合 | 亚洲伊人色 | 国产中文字幕久久 | 麻豆视屏 | 四虎影视精品成人 | 五月开心综合 | 日本成人黄色片 | 黄色av网站在线观看 | 亚洲精品大片www | 久草在线91| 美女又爽又黄 | 91麻豆免费版 | 国产精品入口a级 | 麻豆传媒电影在线观看 | 国产精品99久久久精品免费观看 | 成人免费一区二区三区在线观看 | 欧洲精品视频一区 | 国产一级a毛片视频爆浆 | 久久精品久久久精品美女 | 精品一区二区在线看 | 国产欧美日韩精品一区二区免费 | 天天综合久久综合 | 亚洲国产精品久久久 | 精品1区2区 | 99se视频在线观看 | 97超碰色偷偷 | 中文字幕永久 | 99精品久久99久久久久 | 亚洲成av人电影 | 欧美污污网站 | 黄色片视频免费 | 久久免费看av | 日韩在线视频在线观看 | 成人小视频在线免费观看 | 狠狠色伊人亚洲综合网站野外 | 在线观看国产 | 亚州精品视频 | 在线视频婷婷 | 久久综合综合久久综合 | 九九免费观看视频 | 91视频久久久久 | 999视频在线观看 | 好看的国产精品视频 | 视频三区 | 一区二区三区精品在线视频 | 久久这里只有精品视频首页 | 日韩电影精品一区 | 久久免费影院 | 日夜夜精品视频 | 五月开心六月伊人色婷婷 | 久久综合久久88 | 国产成人在线免费观看 | 午夜精品视频免费在线观看 | 亚洲精品午夜久久久久久久 | 欧美肥妇free | av免费看电影 | 中文字幕高清 | 欧美资源在线观看 | 午夜精品久久久久久久久久久久 | 国产精品一区二区av麻豆 | 国产精品一区免费在线观看 | 久久亚洲精品国产亚洲老地址 | 国产精品美女久久久久久免费 | 激情喷水 | 成年美女黄网站色大片免费看 | 91av视频 | 国产精品www | 麻豆视频在线观看 | 国产精品精品国产 | 91豆麻精品91久久久久久 | 日韩二区在线播放 | 欧美极品少妇xbxb性爽爽视频 | 午夜影院三级 | 久久国产精品免费一区 | 日韩av一区二区在线影视 | 激情九九 | 免费成人看片 | 日韩高清在线一区 | 天天做综合网 | 91成人短视频在线观看 | 国产美女主播精品一区二区三区 | 成人av片免费看 | 久草在线在线精品观看 | 一区二区激情 | 西西444www大胆无视频 | 最新av电影网站 | www.久久色| 亚洲精品综合一区二区 | 五月天天在线 | 亚洲成人av电影在线 | 国产不卡在线观看 | 国产一级黄色av | 亚洲激情六月 | 久久精品国产一区二区 | 国产成人三级在线 | 在线观看日韩 | 亚洲理论片在线观看 | 二区视频在线 | 久草视频在线免费看 | 日韩黄色一区 | 午夜12点 | av黄色亚洲 | 久草在在线 | 午夜在线观看影院 | 免费福利视频网站 | 色婷婷免费视频 | 国产精品欧美在线 | 青青草国产免费 | 久久久国产高清 | 国产超碰在线观看 | 国产四虎在线 | 黄色免费观看网址 | 亚洲精品国产精品乱码在线观看 | 久久av免费 | 永久免费观看视频 | 国产精品免费在线观看视频 | 成人午夜网| 亚洲精品午夜久久久久久久久久久 | 国产视频亚洲视频 | 在线播放 一区 | 国产精品av免费 | 一区二区精品久久 | 4438全国亚洲精品在线观看视频 | 亚洲综合一区二区精品导航 | 人人cao| 91在线产啪| 国内精品免费久久影院 | 黄色三级免费网址 | 午夜丁香视频在线观看 | 国产精品每日更新 | 欧美久久久久久久久久久 | 久久久久久久久久久黄色 | 免费a视频在线观看 | 在线日韩精品视频 | 黄色av成人在线观看 | 国产中文| 亚洲第一成网站 | 亚洲天堂在线观看完整版 | 久久都是精品 | 一区二区三区国产欧美 | 国产精品美女视频网站 | 国产手机视频 | 久久人人爽人人片av | 国产精品免费大片视频 | 天堂中文在线视频 | 五月婷视频 | 91精品播放 | av大片网站 | 在线激情av电影 | 日一日操一操 | 婷婷国产在线 | 人人干人人超 | 精品国产一区二区三区在线观看 | 亚洲第一中文网 | 欧美激情视频一区二区三区 | 狠狠的日| 日本免费久久高清视频 | 国产精品毛片 | 色九九在线 | 亚洲九九九 | 99在线国产 | 久久国产精品影视 | 婷婷视频在线观看 | 超碰人人超 | av五月婷婷| 超碰在线国产 | 国产精品久久久久久久久久不蜜月 | 亚洲激情在线播放 | 久久久午夜精品理论片中文字幕 | 国产精品永久免费视频 | 91在线中字 | 色综合久久久久综合 | 国产韩国日本高清视频 | 日韩激情在线 | 国内精品在线一区 | 在线小视频你懂的 | 福利一区二区三区四区 | 免费观看第二部31集 | 久久电影色 | 久草在线免费资源 | 亚洲国产av精品毛片鲁大师 | 国产涩涩在线观看 | 日韩高清 一区 | 久久精品视频网址 | 亚州av一区 | 国产精品久久久久久久久久三级 | 国色天香第二季 | 97色在线观看| 久久久免费高清视频 | 天天综合狠狠精品 | 在线视频app | 国内久久久 | 综合精品久久久 | 97超碰中文字幕 | 在线 视频 一区二区 | 中文字幕av在线电影 | 国产精品免费一区二区三区在线观看 | 一区二区三区动漫 | 欧美精品久久久久久久久老牛影院 | 在线观看久草 | 国内精品视频一区二区三区八戒 | 中文字幕在线免费看线人 | 九九视频免费观看视频精品 | 欧美 日韩 性 | 免费视频成人 | 国产超碰97 | 国产亚洲精品成人 | 伊人久久国产精品 | 97精品国产aⅴ | 国产黄免费在线观看 | 91av久久| 精品久久久久久久久久久久久久久久 | 深夜免费小视频 | 波多野结衣小视频 | 丁香婷婷电影 | 91九色自拍 | 一级黄色网址 | 天天操夜夜曰 | 深爱激情婷婷网 | 日韩中文字幕免费视频 | 九九热精品在线 | 九九热99视频 | 人人澡人人爽 | 99热国内精品 | 国内外激情视频 | 懂色av懂色av粉嫩av分享吧 | 午夜视频在线网站 | 国产精品久久久久永久免费 | 黄色网www | 亚洲一区二区三区在线看 | 久久综合九色99 | 久久久一本精品99久久精品 | 天天干,天天插 | 中文字幕 成人 | 欧美精品乱码久久久久久按摩 | 精品一区二区在线播放 | 99re中文字幕 | 精品视频在线观看 | 国产三级精品三级在线观看 | 国产破处视频在线播放 | 高清av免费看 | 深夜男人影院 | 免费裸体视频网 | 在线视频a | 69热国产视频 | 免费黄色一区 | 国产福利一区二区三区视频 | 亚洲a成人v | 国产精品美女久久久久aⅴ 干干夜夜 | 亚洲精品美女久久久久网站 | 日韩中文在线播放 | 日韩精品免费在线 | 五月婷婷中文 | 一区二区三区久久 | 97超碰免费 | 亚洲男模gay裸体gay | 91丨九色丨高潮 | 日韩欧美一区二区三区免费观看 | 在线av资源| 九九99 | 韩日精品在线 | 99热精品国产一区二区在线观看 | 天天射天天爱天天干 | 日韩精品免费在线 | 亚洲免费一级电影 | 成人一区二区在线 | 中文字幕亚洲欧美日韩 | 欧美日韩高清在线一区 | 天天爽天天摸 | 亚洲天堂自拍视频 | 中文字幕一区在线 | 久久男人视频 | 黄色大全在线观看 | 99热这里是精品 | 在线黄色毛片 | 亚洲欧美国产精品 | 国产欧美在线一区二区三区 | 国产第一页在线观看 | 国产视频中文字幕在线观看 | 国产精品日韩久久久久 | av性网站| 91在线影视| 91av蜜桃| 久久这里只有精品视频首页 | 黄色官网在线观看 | 99久久er热在这里只有精品15 | 久草在线免费资源 | 久久久久亚洲精品国产 | 久草在线综合 | 在线观看一级 | 18国产精品白浆在线观看免费 | 国产欧美综合在线观看 | 久久亚洲电影 | 午夜免费福利视频 | 久久国产精品免费看 | 亚洲精品一区二区三区新线路 | 久久精品国产成人 | 97福利在线观看 | 久久色在线播放 | 欧美电影在线观看 | 亚洲精品午夜aaa久久久 | 久久综合精品国产一区二区三区 | 天天插狠狠插 | 成人 国产 在线 | 成人免费在线播放视频 | 亚洲精品乱码久久久久久蜜桃动漫 | 久久久精品国产免费观看一区二区 | 波多野结衣动态图 | 久草综合视频 | 最新中文在线视频 | 日本黄色片一区二区 | 国产九九在线 | 91精品国产成 | 日本在线成人 | 欧美极品一区二区三区 | 五月婷婷在线视频 | 一区二区三区久久 | 免费看片成年人 | 麻豆极品 | 亚洲午夜精品一区 | 香蕉久久久久久av成人 | 久久久久久欧美二区电影网 | 国产精品久久久久久久免费 | av看片在线 | 久久久片| 青青河边草免费观看完整版高清 | 国产视频首页 | 亚洲综合欧美日韩狠狠色 | 国产精品视频全国免费观看 | 天堂在线一区二区三区 | 国产粉嫩在线 | 黄在线 | 97电影在线 | 欧美一区二区精品在线 | 日韩va欧美va亚洲va久久 | 免费福利在线观看 | 麻豆传媒视频在线播放 | 激情 一区二区 | 五月天色中色 | 免费男女羞羞的视频网站中文字幕 | 一级黄色片在线免费看 | 亚洲精品国产第一综合99久久 | 黄色av网站在线免费观看 | 在线看黄色av | 人人爽人人搞 | 69久久久久久久 | 91网在线 | 国产一区二区在线播放视频 | 久久久亚洲网站 |