成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C/C++作用域引申出的編碼規范

開發 后端
本文介紹的是C++編程語言的編碼規范,希望對你有幫助,一起來看。

無論是C/C++,還是JAVA,編碼規范都是非常重要,不僅僅在于沒有了它在團體合作中互相讀不懂對方的代碼,還在于以后的自己也可能需要維護以前自己寫的代碼,還在于可讀性越強越不容易犯一些常規錯誤。

規范本身應該是一個規定,但C/C++在編碼上并沒有這樣的規定,凡符合C/C++語法的就是合格的代碼,但符合C/C++語法的代碼不一定是優秀的代碼,要對一些不良行為做約定,比如不應該將局部使用的變量作為全局變量,這是其一;其二,代碼本身也可能會進行合作開發或后期維護,那么一個表達統一結構清晰的代碼是必要的。由這兩點產生了編碼規范,所以編碼規范就是公司或團體對代碼編寫的一個規定和約定。

對于第二點而言,雖然其存在的價值是必須的,但是適用場合都有所不同性,且眾口難調,缺乏非此不可的科學依據。比如大家熟悉的匈牙利命名法,其在變量名稱中包含了類型信息,其優點不言而喻,在代碼實現過程中非常方便,但缺點也有不少,比如 變量本身就具有類型,而名稱中再次包含了類型信息,這是嚴重的冗余,修改變量類型就必須修改變量名稱,更主要的是沒有辦法保證它們的一致性,總之 名稱應該是對功能的描述,而不應該含有類型信息。

所以即使強如匈牙利命名法,在M$的編碼規范中也不將再存在。因為第二點不能放之四海而皆準,所以我將在這篇短文中講述***點,有科學依據則易于為人接受,但我還是要強調一下,這***點只是編碼規范存在理由的一部分,而不是全部,第二個理由也非常重要,其引申出來的規范不可缺少。

要想寫出優秀的C/C++代碼有很多注意點,不是一個小短文可以描述清楚的,我這里僅僅講述變量的作用域和生存期,根據這些規則產生的編碼規范會和你曾經見到過的一些編碼規范有所抵觸,這不足為奇,比如很多編碼規范規定了函數體的***行數,過多的行數大部分情況下是因為功能結構化分不清,不利于閱讀,但卻不一定如此,如果在這個規定和規定這個規定的目的之間產生了抵觸,那么這時就應該舍棄這個規定,所以我認為稱它編碼建議勝于稱它編碼規范。

對于編碼規范含義的講解至此結束,話入正題,對于一個面向過程的語言而言,函數過程是其基本單位,函數是一個功能完整的實現過程,面向對象也如此,只是類代替了函數過程的部分地位。

為什么要將一個過程獨立成一個函數?這是因為此過程功能完整明確,在獨立成一個函數之后其還具備了復用的能力。

為什么不將一個過程獨立成一個函數?這是因為此過程與其他部分耦合度太高,沒有明確的功能含義,即使獨立出來,也不存在可復用的場合。

作用域就是起作用的范圍,一個應該在多處起作用的對象,不應該局限于一個小空間中,反之亦然。這里可以使用的有 函數、對象、名字空間 等,假如以上皆不符合,那么就應該使用為部分人所忽視的“{}”。

以下就是一個對變量/過程的作用域和生存期的演示: 

  1. 很多地方都可能會用到的函數或類型()  
  2. {  
  3. };  
  4. 一個功能函數或類型()  
  5. {  
  6.  僅在此函數或類型中用到且多次用到的子函數或子類型() // C++沒有子函數這一說法,可以使用函數對象(仿函數)替代  
  7. {  
  8. };  
  9. 在接下來的部分也需要用到的變量; // 注意這個分號  
  10. {  
  11.  僅在這個{}中用到的臨時變量;  
  12.  僅在此函數或類型中用到且只用到一次的功能段  
  13. }  
  14.   函數或類型其他部分;  
  15. }; 

這樣就將變量和過程局限在它們應有的空間中,避免了變量和過程對以后的變量和過程的污染,尤其在代碼量很大的程序中,而且因為有了{}區分不同的功能代碼,使得程序可讀性增強。當然一切還是了可讀性,看以下這個情況:

  1. 某個功能代碼的***行;  
  2. 某個功能代碼的第二行;  
  3. 某個功能代碼的第三行;  
  4. {  
  5.  只為此功能實現一次的,由與此功能無邏輯關系的代碼***行;  
  6.  第二行;  
  7.  …… ;  
  8.  第 n行;  
  9. }  
  10. 某個功能代碼的第四行;  
  11. 某個功能代碼的第五行;  
  12. 某個功能代碼的第六行;  
  13. 這樣實現也許邏輯清晰,但在代碼編輯器中需要非常麻煩的上下翻頁才能看到連續的功能代碼,
  14. 而且{}中的代碼太長,像個丑陋的補丁,這時候將{}中的代碼移到一個獨立子函數中比較適合,就變成了  
  15. 某個功能代碼的第三行;  
  16. {  
  17.  call子函數( 參數s ); // 上下的{}可以不要  
  18. }  
  19. 某個功能代碼的第四行; 

當然前面也提到過如果這個子函數和這個功能代碼段的耦合性太強的話,就需要傳遞很多的參數,這沒有什么好的方法,因為這畢竟是為了可讀性而作出的妥協。

局部類(比如定義在函數內部的類)有一些令人不快的功能限制,比如沒辦法作為模板參數,我還不知道在c++中為什么有這樣的限制,但這一點確實確實令人不快。

責任編輯:于鐵 來源: 互聯網
相關推薦

2016-01-28 14:41:06

CC++編碼

2010-02-03 16:42:45

C++變量作用域

2024-03-14 11:27:16

C++變量編程

2011-08-04 09:35:09

Objective-C 編碼規范

2009-08-26 10:09:22

C#編碼規范

2009-05-22 11:01:53

C++JavaC#

2009-06-01 08:48:19

作用域變量作用域對象作用域

2023-09-13 11:51:16

位域C++

2010-01-25 13:43:09

C++算術編碼

2010-01-26 13:14:48

2011-04-21 17:32:15

CC++

2010-01-21 14:07:14

CC++聲明

2010-01-11 13:19:24

C++代碼

2010-09-01 09:19:33

Objective-CiPhone開發iPhone

2010-01-21 09:34:57

C++語法

2010-01-27 16:05:06

C++堆棧

2010-01-26 15:51:06

C++變量

2010-01-28 13:45:06

C++數組

2023-12-14 15:05:08

volatile代碼C++

2020-09-09 09:48:28

C++語言Rust
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线男人天堂 | 免费观看一级特黄欧美大片 | 成人精品鲁一区一区二区 | 丁香六月激情 | 欧美中文字幕一区二区 | 亚洲一区二区中文字幕 | 久久青| 国产91网站在线观看 | 久久尤物免费一区二区三区 | 久久av一区二区三区 | 精品福利一区二区三区 | 成人午夜在线 | 国产精品电影在线观看 | 狠狠躁18三区二区一区 | 日本a级大片 | 成人一区二区三区视频 | 日韩欧美一区二区三区免费观看 | 日韩精品在线免费 | 亚洲成人精品久久久 | 国精产品一品二品国精在线观看 | 不卡视频一区 | 国产三级在线观看播放 | 亚洲精品日韩欧美 | 一级片免费网站 | 久久精品国产久精国产 | 国产精品资源在线观看 | 欧美午夜激情在线 | 亚洲精品免费在线观看 | 午夜免费电影 | 亚洲福利在线视频 | 精品亚洲91| 午夜视频在线观看视频 | 亚洲国产成人精品久久 | 欧美国产精品一区二区三区 | 久久九九99 | 欧美精品一区二区三区四区五区 | 亚洲综合无码一区二区 | 国产9久| 天天看片天天干 | 色综合久| 在线中文字幕国产 |