偽代碼書寫規范_C++代碼書寫規范(推薦新手程序員)

ab1e22b48a1b0970dee1782e9e3c82e7.png

代碼就是程序員的面子,無論是在工作中在電腦上寫程序代碼還是在面試時在紙上寫演示代碼我們都希望寫出整潔,優雅的代碼。特別在工作中當我們碰到需要維護別人的代碼,或者是多人參與一個項目大家一起寫代碼的時候,如果碰到一些丑陋的代碼,我們還要看懂并且修改它的時候,那種難受,肯定會讓我們回想起多年以前自己還是新手程序員的時候,寫下的那些丑陋的代碼,并且深深內疚于將它們留給了我們的后繼者,不知道他們和它們是否還安好。所以,強調代碼的規范性,寫出整潔,優雅,可讀性高的代碼應該是成為一個合格的程序員的第一步。這里我就拋磚引玉,給大家一些關于C++代碼規范性的一些建議。

一、關于添加空格和空行的一些建議

寫代碼的時候添加良好風格的空格和空行可以使代碼看上去更整潔,布局更清晰。

1.空格

· 建議一:函數名之后不要留空格,緊跟左括號‘ (’,以與關鍵字區別。

· 建議二:象 if for、 **while **等關鍵字之后應留一個空格再跟左括號‘ (’,以突出關鍵字。

· 建議三:‘,’之后要留空格。在for語句中的‘;’其后要留空格,如 for (i=0; i<5; i++)。

· 建議四:對于表達式比較長的 **for **語句和 **if **語句,為了緊湊起見可以適當地去掉一些空格。

· 建議五:賦值操作符、比較操作符、算術操作符、邏輯操作符、位域操作符,如“ =”、“ +=” “>=”、“ <=”、“ +”、“ *”、“ %”、“ &&”、“ <

  • 建議六:一元操作符如“ !”、“ ~”、“ ++”、“ --”、“ &”(地址運算符)等前后不加空格。

下面這段代碼就會顯得不優雅,看著有些別扭。

//不好的風格void func (int a,int b,int c,int d){ if(a>=0) { if(a>=b&&c>=d) { int * x = & a;  ...//doSomeThing(); } }}

我們希望將它改為這樣。

//良好的風格void func(int a, int b, int c, int d)//建議一,建議三{ if (a >= 0)//建議二,建議五 { if ((a>=b) && (c>=d))//建議四 { int *x = &a; //建議六 ...//doSomeThing(); } }}

還有這樣的for語句for (i = 0; i < 5; i ++),就屬于空格濫用了,應該改為for (i=0; i<5; i++)。

2.空行

  • 建議一:在實現函數時,函數與函數之間應加空行。
  • 建議二:在一個函數體內,邏揖上密切相關的語句之間不加空行,其它地方應加空行。

當程序中沒有空行時是這樣的。

void func1(){ while (condition) { ...//doSomeThing(); if (condition) { ...//doSomeThingRelated(); } else { ...//doSomeThingRelated(); } ...//doSomeThing(); }}void func2(){ ...//doSomeThing();}

而良好的空行不緊能使代碼看上去更整潔,代碼邏輯也會更清晰。

//良好的風格void func1(){ while (condition) { ...//doSomeThing(); if (condition) { ...//doSomeThingRelated(); } else { ...//doSomeThingRelated(); } ...//doSomeThing(); }}void func2(){ ...//doSomeThing();}

二、關于代碼行格式的一些建議

· 建議一:一行代碼只做一件事情。

· 建議二:長表達式要在低優先級操作符處拆分成新行,操作符放在新行之首 (以便突出操作符)。拆分出的新行要進行適當的縮進,使排版整齊,語句可讀。

//不好的風格void func(){ int veryVeryLongWidth, veryVeryLongHeight; if ((veryVeryLongWidth > veryVeryLongHeight) || (veryVeryLongWidth < veryVeryLongHeight))doSomeThing();}

過長的代碼行無論是書寫還是閱讀對人來說都不是一個美好的體驗,所以我們建議以上代碼要這樣寫。

//良好的風格void func(){ int veryVeryLongWidth;  int veryVeryLongHeight; if ((veryVeryLongWidth > veryVeryLongHeight) || (veryVeryLongWidth < veryVeryLongHeight)) { doSomeThing(); }}
0b48eb0916a5165fecbea939eac7ad52.png

三、關于命名的一些建議

· 建議一:變量,函數,文件命名應該具有描述性,最好采用英文單詞或其組合(不要使用拼音,或者無意義的abc之類的,除了像for (i=0; i<5; i++)中的i這樣的),以便記憶和閱讀。

· 建議二:類名和函數名用大寫字母開頭的單詞組合而成。

例如:

class Book; class ReadBook; void Draw(); void DrawImage();

· 建議三:變量和參數用小寫字母開頭的單詞組合而成。

例如:

int value;void SetValueMode(int valueMode);

· 建議四:常量全用大寫的字母,用下劃線分割單詞。

例如:

const int MAX = 100;const int MAX_LENGTH = 100;

· 建議五:全局變量加前綴 g_(表示 global)。靜態變量加前綴 s_(表示 static)。類的成員變量加前綴 m_(表示 member)。

例如:

int g_maxValue;static int s_maxValue; void Object::SetValue(int maxValue){ m_maxValue = maxValue;}

四、關于添加注釋的一些建議

在C++中注釋主要有兩種,程序塊的注釋常采用“ /*…*/”,行注釋一般采用“ //…”。注釋主要用在3個地方。1、版權申明,2、函數說明,3、重要或復雜代碼提示。對于前兩種,每個人或者每個公司都有個人的規范和習慣,這里只要大家在公司內部統一即可。關于第三種給重要或復雜代碼添加提示,我們有一下幾點建議。

· 建議一:注釋的確很重要,但是最好的代碼本身就是文檔(self-document),類型和變量命名意義明確要比通過注釋解釋模糊命名好得多

· 建議二:邊寫代碼邊注釋,修改代碼同時修改相應的注釋,以保證注釋與代碼的一致性。不再有用的注釋要記得刪除。

· 建議三:注釋的位置應與被描述的代碼相鄰,可以放在代碼的上方或右方,不可放在下方。

五、關于類中成員聲明次序的一些建議

  • 建議一:在類中按照public:、protect:、private:的次序聲明。如果那一塊沒有直接忽略。
  • 建議二:在同一塊中按照1、結構體和枚舉,2、常量,3、構造函數,4、析構函數,5、成員函數,6、成員變量的次序聲明。

六、關于if語句中的變量“與零值比較”的一些建議

  • 建議一:不可將布爾變量直接與 TRUE、 **FALSE **或者 1、 **0 **進行比較。

假設布爾變量名字為 flag,它與零值比較的標準 if 語句如下:

if (flag) // 表示 flag 為真if (!flag) // 表示 flag 為假
  • 建議二:應當將整型變量用“ ==”或“!=”直接與 0 比較。
  • 假設整型變量的名字為 value,它與零值比較的標準 if 語句如下:
if (value == 0)if (value != 0)

也可以將0放在比較運算符前面。

if (0 == value)if (0 != value)

這時如果將“==”寫成“=”,編譯器會報錯。

· 建議三:不可將浮點變量用“ ==”或“!=”與任何數字比較。無論是 float 還是 double 類型的變量,都有精度限制。所以一定要避免將浮點變量用“ ==”或“!=”與數字比較,應該設法轉化成“ >=”或“ <=”形式。

假設浮點變量的名字為 x,應當將

if (x == 0.0) // 隱含錯誤的比較

修改為

const float EPSINON = 0.00001;if ((x>=-EPSINON) && (x<=EPSINON))

其中 EPSINON 是允許的誤差(即精度)。

· 建議四:應當將指針變量用“ ==”或“! =”與** NULL **比較。

假設指針變量的名字為 p,它與零值比較的標準 if 語句如下:

if (p == NULL) // p 與 NULL 顯式比較,強調 p 是指針變量if (p != NULL)
25ab02304723d7c8b5f397d35f7aa569.png

有什么好的想法,歡迎評論。 喜歡的關注收藏哦!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538740.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538740.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538740.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java基礎17:Java IO流總結

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 https://blog.csdn.net/a724888/article/details/80201802 這位大俠&#xff0c;這是我的公眾號&#xff1a;程序員江湖。 分享程序員面試與技術的那些事。 干貨滿滿&#xff0c;關注就送。 本文介…

nuxt頁面跳轉_nuxt 項目如何解決組件復用時頁面不刷新的問題

組件復用會在兩種情況下發生&#xff1a;1、使用 keep-alive 時&#xff0c;頁面再次跳轉時&#xff0c;數據不更新每一次路由的切換都會導致頁面被重新渲染&#xff0c;無論是各種鉤子還是異步獲取數據函數都會被執行&#xff0c;為了提高網站性能&#xff0c;可以使用 keep-a…

20.命名規范

所有變量&#xff0c;方法&#xff0c;類名&#xff1a;見名知意 變量&#xff0c;方法名 --首字母小寫和駝峰原則。 如&#xff1a;run(),getName() 常量 ---大寫字母和下劃線&#xff1a;MAX_VALUE 類名 ---首字母大寫和駝峰原則。 如&#xff1a;Man,HelloWorld ------…

k8s查看pod的yaml文件_K8s-yaml的使用及命令

YAML配置文件管理對象對象管理&#xff1a;# 創建deployment資源kubectl create-f nginx-deployment.yaml# 查看deploymentkubectl get deploy# 查看ReplicaSetkubectl get rs# 查看pods所有標簽kubectl get pods--show-labels# 根據標簽查看podskubectl get pods-l appnginx# …

Orange Business Services 全球發布 Easy Go Network,幫助企業加速實現“網絡即服務”...

100% 數字化, 軟件定義網絡( SDN) 產品在 75 個國家上市 在云、移動化、大數據和物聯網&#xff08;IoT&#xff09;趨勢的推動下&#xff0c;企業不斷尋求更加智能和更加靈活的網絡&#xff0c;以支持他們的數字化轉型方案。而網絡只有演進至“網絡即服務”&#xff08;NaaS&a…

vue的html自動刷新,Vue頁面刷新記住頁面狀態的實現

環境vue項目&#xff0c;頁面有搜索、篩選項等。需求頁面跳轉&#xff0c;切換或者刷新&#xff0c;希望可以記住用戶在頁面的篩選狀態方案v1vue有提供一種緩存組件的解決方案 — keep-alive。緩存不活動的組件實例&#xff0c;而不是銷毀它們。我們可以使用keep-alive包括路由…

python 程序停止打印日志_Python日志打印

簡單示例import sysimport ctypesimport loggingimport logging.handlersreload(sys)sys.setdefaultencoding(utf-8)LOG_FILE test_loglogging.basicConfig(filename LOG_FILE,format %(asctime)s - %(levelname)s -%(process)d- %(filename)s:%(funcName)s:%(lineno)d - %(…

21.和和instance of

>> 右移一位。相當于除2 << 左移一位。相當于乘2 public static void main(String[] args) {int a3<<2;int b12>>2;System.out.println("a"a);System.out.println("b"b);}解析&#xff1a; a3*2*212 b12/2/23 運行結果&#xf…

html語言閃爍特效代碼,css3 文字閃爍特效代碼

今天給大家分享幾個文字閃爍特效代碼&#xff0c;純css3代碼實現&#xff0c;對于新手小伙伴值得拿來學習一下。文字閃爍特效一通過改變透明度來實現文字的漸變閃爍&#xff0c;代碼如下&#xff1a;文字閃爍&#xff1a;閃爍效果.main{color: #666;margin-top: 50px;}/* 定義k…

keyshot怎么貼logo_如何使用KeyShot添加有織紋的Logo

如果你的產品上有企業logo&#xff0c;那么將logo作為一種材質(如鍍鉻貼紙)就很常見了&#xff0c;但不是在3D里建模logo&#xff0c;建模logo會產生額外的工作&#xff0c;還會降低建模的效率&#xff0c;不過KeyShot提供了一種簡單的方法&#xff0c;可以更快地實現相同的效果…

tar解壓出錯tar: Child returned status 1

一、錯誤情況 目前我遇到錯誤情況&#xff1a; 1、壓縮文件不是 .tar.gz的文件是.tar文件。使用了 tar -zxvf 命令。 解決方法&#xff1a; 去掉z。 原因&#xff1a; .tar只是將文件打包&#xff0c;文件的大小沒什么變化。 .tar.gz是加入了gzip的壓縮命令&#xff0c…

2021年山西副高考試成績查詢,中國衛生人才網2021年山西衛生資格考試成績查詢...

2021年山西衛生資格考試成績查詢 由中國衛生人才網考試快訊提供&#xff0c;以及提供2021國家衛生資格成績查詢考試信息。更多關于2021年山西衛生資格考試成績查詢 ,衛生資格考試,2021衛生資格考試,衛生資格成績快訊的內容&#xff0c;請關注國家衛生資格考試網&#xff01;!20…

團隊項目作業1-團隊展示與選題

團隊展示&#xff1a; 隊名&#xff1a;summer 團隊項目描述&#xff1a;基于java 、web的四則運算網站的開發&#xff0c;有三種角色&#xff1a;老師、家長、學生。老師在網站上發布四則運算作業&#xff0c;可以設置題目數量&#xff0c;數值范圍、以及完成作業限定的時間。…

SP2-0734: 未知的命令開頭 imp scott/... - 忽略了剩余的行。

原文地址&#xff1a;http://blog.csdn.net/yangwenxue_admin/article/details/47667943 Oracle數據導入報錯&#xff1a;SP2-0734: 未知的命令開頭 "imp scott/..." - 忽略了剩余的行。 原因&#xff1a;進入sqlplus里是不能執行imp的(sqlplus不認識imp)&#xff0c…

datatable中某一列最小值_Asp.net中獲取DataTable選擇第一行某一列值

數據源是一個DataTable&#xff0c;現在我們需要獲取這個DataTable的第一行第一列的值。先準備一個數據集&#xff0c;創建一個DataTable&#xff0c;并填充數據&#xff1a;source code:using System;using System.Collections.Generic;using System.Data;using System.Linq;u…

斯坦福計算機科學教材,斯坦福計算機科學

斯坦福大學稱得上是世界上最難進的大學之一&#xff0c;尤其是稱之為其王牌專業的計算機科學。競爭壓力之大不容置疑&#xff0c;首先要弄明白申請要求是什么。出國留學網本文將為大家介紹斯坦福大學計算機科學專業申請條件&#xff0c;請看。計算機科學專業申請要求聽了這么多…

impdp導入dmp文件

impdp命令在cmd下直接用&#xff0c;不必登錄oracle。只能導入expdp導出的dmp文件。 expdp導出的時候&#xff0c;需要創建 DIRECTORY 導出什么表空間&#xff0c;導入也要什么表空間。 導出什么用戶&#xff0c;導入也要什么用戶。 如果沒有要新建。 從杭州服務器expdp導出…

ArrayList去除集合中字符串的重復值

/* * 需求&#xff1a;ArrayList去除集合中字符串的重復值 * * 分析&#xff1a; * 1.創建一個集合對象 * 2.添加多個字符串元素 * 3.創建一個新的集合 * 4.拿舊集合中的元素到新集合中去找 * A&#xff1a;有則 不要 * B:沒有則添加到新集合中 * 5.遍歷輸出 新集合 */ packa…

silk 編解碼_Silk編解碼在android實現

Silk編解碼是Skype向第三方開發人員和硬件制造商提供免版稅認證(RF)的Silk寬帶音頻編碼器。Skype已將其開源&#xff0c;可以訪問http://developer.skype.com/silk獲取最新動向。SILK Codec是一個語音和音頻編解碼算法, 對于音頻帶寬、網絡帶寬和算法復雜度都具有很好的彈性。支…