日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C编程规范

發布時間:2025/5/22 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C编程规范 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目 錄

?

1、版面... 4

2、命名... 5

3、注釋... 6

4、源代碼結構... 11

附錄A:常見單詞縮寫表... 12

?


1、版面

?

【規則1-1】 程序塊要采用縮進風格編寫,縮進的空格數為4個。

?

【規則1-2】 對齊與縮進只使用空格鍵,不使用TAB鍵。說明:以免用不同的編輯器閱讀程序時,因TAB鍵所設置的空格數目不同而造成程序布局不整齊,不要使用會自動將8個空格變為一個TAB鍵的開發工具編輯代碼。(可開發工具軟件自動將TAB鍵轉換為4個空格)

?

【規則1-3】 函數或過程的開始、結構的定義及循環、判斷等語句中的代碼都要采用縮進風格,case語句下的情況處理語句也要遵從語句縮進要求。

?

【規則1-4】 相對獨立的程序塊之間、變量說明之后必須加空行(一個空行即可)。

?

【規則1-5】 一行程序以小于80字符為宜,不要寫得過長。

?

【規則1-6】 較長的語句(>80字符)要盡量分成多行書寫,長表達式要在低優先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進行適當的縮進,使排版整齊,語句可讀。

?

【規則1-7】 循環、判斷等語句中若有較長的表達式或語句,則要進行適應的劃分,長表達式要在低優先級操作符處劃分新行,操作符放在新行之首。

?

【規則1-8】 若函數或過程中的參數較長,則要進行適當的劃分。

?

【規則1-9】 不允許把多個短語句寫在一行中,即一行只寫一條語句。

?

【規則1-10】? if、for、do、while、case、switch、default等語句自占一行,且if、for、do、while等語句的執行語句部分無論多少都要加括號{}。

?

【規則1-11】? 程序塊的分界符(如C/C++語言的大括號‘{’和‘}’)應各獨占一行并且位于同一列,同時與引用它們的語句左對齊。在函數體的開始、類的定義、結構的定義、枚舉的定義以及if、for、do、while、switch、case語句中的程序都要采用縮進方式。

?

【規則1-12】? 在兩個以上的關鍵字、變量、常量進行對等操作時,它們之間的操作符之前、之后或者前后要加空格;進行非對等操作時,如果是關系密切的立即操作符(如->),后不應加空格。說明:采用這種松散方式編寫代碼的目的是使代碼更加清晰。由于留空格所產生的清晰性是相對的,所以,在已經非常清晰的語句中沒有必要再留空格,如果語句已足夠清晰則括號內側(即左括號后面和右括號前面)不需要加空格,多重括號間不必加空格,因為在C/C++語言中括號已經是最清晰的標志了。在長語句中,如果需要加的空格非常多,那么應該保持整體清晰,而在局部不加空格。給操作符留空格時不要連續留兩個以上空格。

1、?????逗號、分號只在后面加空格。

2、?????比較操作符, 賦值操作符"="、 "+=",算術操作符"+"、"%",邏輯操作符"&&"、"&",位域操作符"<<"、"^"等雙目操作符的前后加空格。

3、?????"!"、"~"、"++"、"--"、"&"(地址運算符)等單目操作符前后可以不加空格。

4、?????"->"、"."前后不加空格。

5、?????if、for、while、switch等與后面的括號間應加空格,使if等關鍵字更為突出、明顯。

?

【規則1-13】? 注意運算符的優先級,并用括號明確表達式的操作順序,避免使用默認優先級。說明:防止閱讀程序時產生誤解,防止因默認的優先級與設計思想不符而導致程序出錯。

?

【規則1-14】避免使用不易理解的數字,用有意義的標識來替代。涉及物理狀態或者含有物理意義的常量,不應直接使用數字,必須用有意義的枚舉或宏來代替。

?

【規則1-15】? 源程序中關系較為緊密的代碼應盡可能相鄰。

?

【規則1-16】? 不要使用難懂的技巧性很高的語句,除非很有必要時。

2、命名

【規則2-1】 每一個C++類必須使用一個獨立的源文件進行書寫(一個.h文件或一個.h和.cpp文件);并且要求文件名稱必須與類名相同(注意:文件名稱必須大小寫敏感)。

?

【規則2-2】 變量命名必須符合以下約束:

l? 變量名稱中獨立單詞的首字母必須大寫,其它字母小寫。

l? 變量名稱中的獨立單詞為標準術語的縮寫詞匯,允許全部大寫。

l? 變量名稱中的獨立單詞一般情況下必須使用全稱,允許在適當的情況下使用縮寫,常見單詞縮寫參見附錄A。

l? 變量名稱之前必須附加前綴用來識別變量類型,前綴標準定義如下:

類型

前綴

備注

short

int

long

n

帶符號整數

unsigned short

unsigned integer

unsigned long

u

無符號整數

char

unsigned char

c

字符

float

double

f

浮點數

bool

b

布爾量

char*

unsigned char*

sz

程序中明確作為字符串使用

char*

unsigned char*

bf

程序中明確存放的是二進制數據

WORD

w

Windows平臺專用

DWORD

dw

Windows平臺專用

o

所有類定義的實例對象一律使用“o”作為前綴

指針

p

一般p后面會跟隨一個指示具體類型的前綴,例如“pu”表示一個無符號數指針,“po”表示一個對象指針

指針的指針

pp

其它更多指針依此類推

?

l? 針對基本類型重定義的新類型,前綴參照原始數據類型的前綴,例如“size_t”類型前綴為“u”。

l? C++類和結構的成員變量名在符合前面的規范基礎上再附加前綴“m_”。

l? 跨模塊使用的全局變量名稱在符合前面的規范基礎上再附加前綴“g_”。

l? 模塊內部使用的全局變量名稱在符合前面的規范基礎上再附加前綴“_g_”。

l? 單字符變量只能用作循環變量。

?

【規則2-3】 函數命名必須符合以下約束:

l? 函數名稱中獨立單詞的首字母必須大寫,其它字母小寫(特例:允許第一個單詞首字母小寫)。

l? 函數名稱中第一個單詞必須是動詞,盡量不使用縮寫(除非是眾所周知的縮寫單詞)。

l? 函數名稱中的獨立單詞為標準術語的縮寫詞匯,允許全部大寫。

l? 函數名稱中的獨立單詞一般情況下必須使用全稱,允許在適當的情況下使用縮寫,常見單詞縮寫參見附錄A。

?

3、注釋

【規則3-1】 本規范規定程序注釋采用文檔生成工具DOXYGEN進行處理。

?

【規則3-2】 源文件.cpp、頭文件.h文件及其它說明性文件頭部必須進行注釋,注釋如下格式所示。

?

?

/**

? @file???? ? 程序文件名稱(如ByteBuffer.cpp)

? @brief??? 程序文件的簡要說明

??? ???? ???? ????

??? ???? ???? ???? 程序文件的詳細說明(簡要與詳細說明之間間隔一個空行)

? @author? 作者姓名

? @version ? 版本編號 ??修訂日期 修訂者 修訂內容

?*/

?

注:

l? 注釋必須以“/**”開頭

l? 允許存在多個@version指示符描述版本修訂歷程(每個@version指示符描述一個版本)

?

【規則3-3】 源程序模塊函數接口(允許在其它模塊使用的函數)必須注釋,注釋如下格式所示。

?

?

/**

? @brief??? 函數的簡要說明

??? ???? ???? ????

??? ???? ???? ???? 函數的詳細說明(簡要與詳細說明之間間隔一個空行)

? @param? 參數名稱 參數說明

? @return? ? 返回值說明

? @retval? ? 值 返回值具體單個值說明

*/

?

注:

l? 注釋必須以“/**”開頭

l? 注釋必須置于函數定義原型之上

l? 允許存在多個@param指示符描述多個參數(每個@param指示符描述一個參數)

l? 允許存在多個@retval指示符描述多個具體的返回值說明(每個retval指示符描述一個返回值)

l? @param、@return、@retval指示符均是可選項

?

【規則3-4】 源程序模塊內部函數接口(即模塊內部的私有函數)可以不必注釋,一旦注釋,采取如下格式所示。

?

?

/*

? @brief??? 函數的簡要說明

??? ???? ???? ????

??? ???? ???? ???? 函數的詳細說明(簡要與詳細說明之間間隔一個空行)

? @param? 參數名稱 參數說明

? @return? ? 返回值說明

? @retval? ? 值 返回值具體單個值說明

*/

?

注:

l? 注釋必須以“/*”開頭

l? 注釋必須置于函數定義原型之上

l? 允許存在多個@param指示符描述多個參數(每個@param指示符描述一個參數)

l? 允許存在多個@retval指示符描述多個具體的返回值說明(每個retval指示符描述一個返回值)

l? @param、@return、@retval指示符均是可選項

l? 對于一些非常簡單的模塊內部私有函數可以使用簡單注釋,不作強制規范要求

?

【規則3-5】 源程序模塊變量接口(允許在其它模塊使用的變量)必須注釋,注釋如下格式所示(有兩種注釋格式)。

?

格式一:

?

/**

? @brief??? 變量的簡要說明

??? ???? ???? ????

??? ???? ???? ???? 變量的詳細說明(簡要與詳細說明之間間隔一個空行)

*/

?

注:

l? 注釋必須以“/**”開頭

l? 注釋必須置于變量定義之上

?

格式二:

?

? ///< 變量的說明

?

注:

l? 注釋必須以“///<”開頭

l? 注釋必須置于變量定義之后,與變量定義處于同一行

?

【規則3-6】源程序模塊內部變量接口(即模塊內部的私有變量)可以不必注釋,一旦注釋,采取如下格式所示(有兩種注釋格式)。

?

格式一:

?

/*

? @brief??? 變量的簡要說明

??? ???? ???? ????

??? ???? ???? ???? 變量的詳細說明(簡要與詳細說明之間間隔一個空行)

*/

?

注:

l? 注釋必須以“/*”開頭

l? 注釋必須置于變量定義之上

?

格式二:

?

? // 變量的說明

?

注:

l? 注釋必須以“//”開頭

l? 注釋必須置于變量定義之后,與變量定義處于同一行

?

【規則3-7】 源程序模塊自定義類型必須注釋(含結構、C++類等),注釋如下格式所示。

?

?

/**

? @brief??? 類型的簡要說明

??? ???? ???? ????

??? ???? ???? ???? 類型的詳細說明(簡要與詳細說明之間間隔一個空行)

*/

?

注:

l? 注釋必須以“/**”開頭

l? 注釋必須置于類型定義之上

l? 對子元素的注釋可參照對函數、變量的注釋格式

?

【規則3-8】 一般情況下,源程序有效注釋量必須達到20%以上。

?

【規則3-9】 邊寫代碼邊注釋,修改代碼同時修改相應的注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪除。

?

【規則3-10】? 注釋的內容要清楚、明了,含義準確,防止注釋二義性。說明:錯誤的注釋不但無益反而有害。

?

【規則3-11】? 避免在注釋中使用縮寫,特別是非常用縮寫。說明:在使用縮寫時或之前,應對縮寫進行必要的說明。

?

【規則3-12】 注釋應與其描述的代碼相近,對代碼的注釋應放在其上方或右方(對單條語句的注釋)相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開。

?

【規則3-13】 對于所有有物理含義的變量、常量,如果其命名不是充分自注釋的,在聲明時都必須加以注釋,說明其物理含義。變量、常量、宏的注釋應放在其上方相鄰位置或右方。

?

【規則3-14】 數據結構聲明(包括數組、結構、類、枚舉等),如果其命名不是充分自注釋的,必須加以注釋。對數據結構的注釋應放在其上方相鄰位置,不可放在下面;對結構中的每個域的注釋放在此域的右方。

?

【規則3-15】 全局變量要有較詳細的注釋,包括對其功能、取值范圍、哪些函數或過程存取它以及存取時注意事項等的說明。

?

【規則3-16】 注釋與所描述內容進行同樣的縮排。說明:可使程序排版整齊,并方便注釋的閱讀與理解。

?

【規則3-17】 將注釋與其上面的代碼用空行隔開。

?

【規則3-18】 對變量的定義和分支語句(條件分支、循環語句等)必須編寫注釋。說明:這些語句往往是程序實現某一特定功能的關鍵,對于維護人員來說,良好的注釋幫助更好的理解程序,有時甚至優于看設計文檔。

?

【規則3-19】 對于switch語句下的case語句,如果因為特殊情況需要處理完一個case后進入下一個case處理,必須在該case語句處理完、下一個case語句前加上明確的注釋。說明:這樣比較清楚程序編寫者的意圖,有效防止無故遺漏break語句。

?

【規則3-20】 避免在一行代碼或表達式的中間插入注釋。說明:除非必要,不應在代碼或表達式中間插入注釋,否則容易使代碼可理解性變差。

?

【規則3-21】 通過對函數或過程、變量、結構等正確的命名以及合理地組織代碼的結構,使代碼成為自注釋的。說明:清晰準確的函數、變量等的命名,可增加代碼可讀性,并減少不必要的注釋。

?

【規則3-22】 在代碼的功能、意圖層次上進行注釋,提供有用、額外的信息。說明:注釋的目的是解釋代碼的目的、功能和采用的方法,提供代碼以外的信息,幫助讀者理解代碼,防止沒必要的重復注釋信息。

?

【規則3-23】 在程序塊的結束行右方加注釋標記,以表明某程序塊的結束。說明:當代碼段較長,特別是多重嵌套時,這樣做可以使代碼更清晰,更便于閱讀。

?

【規則3-24】 注釋應考慮程序易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除非能用非常流利準確的英文表達。說明:注釋語言不統一,影響程序易讀性和外觀排版,出于對維護人員的考慮,建議使用中文。

4、源代碼結構

【規則4-1】 本規范規定源代碼結構必須符合如下規范:

l? 源代碼目錄結構如下:

l? 源代碼目錄結構說明如下:

?

名稱

說明

doc

存放源代碼相關的說明文檔及通過Doxygen生成的源代碼注釋文檔

include

存放程序使用的庫程序的頭文件及本程序提供給外部使用的頭文件

src

存放程序中與平臺無關的源代碼

win32

存放Windows平臺相關的源代碼及Windows平臺下的工程文件、編譯臨時文件和編譯后的目標程序文件(debug和release版)

win32_release

存放Windows平臺程序使用的庫程序(dll和lib)及本程序提供給外部使用的庫程序(dll和lib)(注:要求debug和release版本對應的庫程序文件不同,例如在debug版本的庫文件名后附加字符“d”);

存放本程序編譯的release版本程序文件

linux

存放Linux平臺相關的源代碼及Linux平臺下的工程文件、編譯臨時文件和編譯后的目標程序文件(debug和release版)

linux_release

存放Linux平臺下本程序使用的庫程序及本程序提供給外部使用的庫程序;

存放Linux平臺下本程序編譯的release版本程序文件

n? 當需要同時編譯成VC6和VS2005目標程序時,可以創建多個“win32_release”目錄,目錄名稱可通過附加后綴進行區分,例如“win32_release.net”。

n? 當需要同時編譯成支持不同內核版本的Linux目標程序,可以創建多個“linux_release”目錄,目錄名稱可通過附加內核版本作為后綴進行區分。

附錄A:常見單詞縮寫表

單詞

縮寫

source

src

destination

dst

command

cmd

program

prg

send

snd

sender

sndr

receive

recv

receiver

recvr

?

轉載于:https://www.cnblogs.com/lgh1992314/p/5834731.html

總結

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

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