c c 的程式設計規範

2021-06-05 10:24:26 字數 3971 閱讀 5264

乙個程式設計師的編碼水平如何,從他寫的**的風格,布局就可以看出來。所以良好的編碼風格是非常重要的。清晰易讀的**,才是高質量的**。

下面是我從網上找到的乙個關於編碼風格的帖子。

對於程式設計的初學者比較有用,高手就不必瀏覽了。

一.

每日編寫如此之多的**,很多同學現在的想法是,我要實現功能,實現了功能以後,萬事大吉。

其實在實際工作當中不是這樣的。在工作當中,因為各種原因,程式設計師們來來往往,是很頻繁的事情。所以,要求我們的**格式規範工整,這裡就涉及到幾點**編寫的要求: 1 

變數名要有意義

變數名不能讓人不知所云。比如動輒str1,str2。你今天知道這是個字串,等你過一段時間再來看的話,你就未必知道這是個什麼東西了。它到底是幹嘛用的?我當時寫了這玩意是有啥想法來著?一概不記得了。但是如果你起個有點意義的名字,情況就會好很多了。比如說,臨時使用的sql語句,你可以起個名字叫m_tmpsql。我想,看到這個變數名的人,再怎麼想,都能想出來這裡面存放的是個sql語句。

2**縮排工整

現在的ide裡,有很多自動縮排的功能,比如你在if後打上大括號,ide會自動給你放到合適的位置。但是有一種情況,如果你的**是複製貼上進來的呢?這時候的縮排不見得完全準確。如果是vc6的話,可以使用alt+f8,ide會幫你搞定一切。一般來說,手工排版的話,在ide裡可以使用tab鍵。而如果是在文字編輯器裡的話,建議使用四個空格。因為空格的長度在任何地方都是一樣的,而乙個製表位就不見得一樣了。

3合理適當的注釋

很多同學寫**都不喜歡加注釋的,原因多半還是認為自己肯定能看的懂。實際上,合理的注釋是很有必要的。有些時候,為了完成一些功能,你靈光一現,寫出了一些絕妙的**,或者使用了複雜的邏輯來書寫**。可是你的後來人咋辦呢?或者日後你自己修改的時候,面對滿眼的if,else,for,switch,估計動起來也有點膽戰心驚吧?並且,合理的注釋在你寫**的時候,也能幫你釐清思路,明白自己在做什麼,下一步要怎麼進行

from

:很多同學喜歡把**拿上來,詢問。

不過,肖老師是程式白痴,看不懂同學們的**。

舉個例子

這是某位同學的**,我僅僅是舉例子,不是針對這位同學,希望不要見怪哈。

#include這個看得懂

using namespace std;  這個也知道

int main() 這個簡直太懂了

;  fn請問是做什麼的?10000是什麼意思?

fn[0]=fn[1]=1; 

為啥0和1這兩個單元要賦初值?為啥是1?

int i,j;  這個能猜出來,這是迴圈變數。

for(i=2;i<=num;i++)  為啥是2開始,而不是0?

if(fn[j]>0)  為啥是大於0?可不可能小於0?

fn[0]++;

} for(i=fn[0];i>0;i--)  為啥從後向前列印?

cout<

return 0;}

這種程式,在我們的工程專案中,將會直接拒收。並且不計算工作量,嗯,順便也就不發薪水了。

大家寫程式,請務必寫出人看得懂的程式,不要想當然的認為,每個人都有你這麼高的水平,每個人理所當然,思路這會和你一致,一定能看懂你寫的**。

這裡我也提示大家一段**。

int safeprintf(char* szbuf,int nmaxlength,char *szformat, ...) 

這是一段變參的字串列印函式,我也沒有加任何注釋,如果有看不懂的同學,請直接向我詢問。

裡面使用的是匈牙利命名法。

from

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

空行空行起著分隔程式段落的作用。空行得體(不過多也不過少)將使程式的布局更加清晰。  

【規則1-1】在每個類宣告之後、每個函式定義結束之後都要加空行

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

2**行

  【規則2-1】一行**只做一件事情,如只定義乙個變數,或只寫一條語句。這樣的**容易閱讀,並且方便於寫注釋。

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

  【建議2-3】

盡可能在定義變數的同時初始化該變數(就近原則) 3 

**行內的空格

  【規則3-1】關鍵字之後要留空格。象const、virtual、inline、case 等關鍵字之後至少要留乙個空格,否則無法辨析關鍵字。象if、for、while等關鍵字之後應留乙個空格再跟左括號『(』,以突出關鍵字。

  【規則3-2】函式名之後不要留空格,緊跟左括號『(』,以與關鍵字區別。

  【規則3-3】『(』向後緊跟,『)』、『,』、『;』向前緊跟,緊跟處不留空格。

  【規則3-4】『,』之後要留空格,如function(x, y, z)。如果『;』不是一行的結束符號,其後要留空格,如for (initialization; condition; update)。

4 對齊與縮排

  【規則4-1】程式的分界符『』應獨佔一行並且位於同一列,同時與引用它們的語句左對齊。

  【規則4-2】採用統一的縮排格式,以四個空格作為縮排符號,不以tab字元作為縮排符號,因為tab字元在不同的編輯器中表示的寬度不同。

  【規則4-3】之內的**塊在『

struct a;

  【規則5-3】注釋是對**的「提示」,而不是文件。程式中的注釋不可喧賓奪主,注釋太多了會讓人眼花繚亂。注釋的花樣要少。

  【規則5-4】如果**本來就是清楚的,則不必加注釋。否則多此一舉,令人厭煩。例如:i++; // i 加1,多餘的注釋

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

6 長行拆分

  【規則6-1】**行最大長度宜控制在70至80個字元以內。**行不要過長,否則眼睛看不過來,也不便於列印。

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

from

三.匈牙利命名法

匈牙利命名法是一種程式設計時的命名規範。基本原則是:變數名=屬性+型別+物件描述,其中每一物件的名稱都要求有明確含義,可以取物件名字全稱或名字的一部分。命名要基於容易記憶容易理解的原則。保證名字的連貫性是非常重要的。

舉例來說,表單的名稱為

form

,那麼在匈牙利命名法中可以簡寫為

frm,則當表單變數名稱為

switchboard

時,變數全稱應該為

frmswitchboard

。這樣可以很容易從變數名看出

switchboard

是乙個表單,同樣,如果此變數型別為標籤,那麼就應命名成

lblswitchboard

。可以看出,匈牙利命名法非常便於記憶,而且使變數名非常清晰易懂,這樣,增強了**的可讀性,方便各程式設計師之間相互交流**。

四.駱駝命名法

駱駝式命令法,正如它的名稱所表示的那樣,是指混合使用大小寫字母來構成變數和函式的名字。例如,下面是分別用駱駝式命名法和下劃線法命名的同乙個函式:

printemployeepaychecks()

;print_employee_paychecks()

;第乙個函式名使用了駱駝式命名法

——函式名中的每乙個邏輯斷點都有乙個大寫字母來標記;第二個函式名使用了下劃線法

----

函式名中的每乙個邏輯斷點都有乙個下劃線來標記。

駱駝式命名法近年來越來越流行了,在許多新的函式庫和

microsoft

windows

這樣的環境中,它使用得當相多。另一方面,下劃線法是

c出現後開始流行起來的,在許多舊的程式和

unix

這樣的環境中,它的使用非常普遍

C C 程式設計規範

1 注意 strncpy strncat等帶n版本的字串操作函式在源字串長度超出n標識的長度時,會將包括 0 結束符在內的超長字串截斷,導致 0 結束符丟失。這時需要手動為目標字串設定 0 結束符。char dst 11 注意 最好每次定義時初始化為0 dst 11 char src 0123456...

C C 對比學習 google C 程式設計規範

c和c 的關係 學習任何一門新的語言都必須對已學過的進行思考,找出異同點,方便學習新語言的特性。c 的意思 c plus plus c 是完全相容c語言的,其中很多特性都能體現出來。c c stdio.h printf scanf 函式無過載,且結構體不能為空 過程 c cpp iostream 引...

17 C C 程式設計規範精述

c c 程式設計規範精述 匈牙利命名法 1 排版上不同小結構間要空行分開,子邏輯項相對父邏輯項要縮排 及if,while 等判斷語句應獨佔行並對齊,且後加空格以顯突出。2 注釋位於相應 上面或右旁邊。且與其它 空行或空格隔開。3 變數命名風格 採用 unix 的全小寫加下劃線的風格或大小寫混排的方式...