第一篇:編程規(guī)范(程序員必看)
編程規(guī)范(程序員必看)
作者:
評(píng)價(jià):
上站日期:
內(nèi)容說(shuō)明:
來(lái)源:
.基本要求
1.1 程序結(jié)構(gòu)清析,簡(jiǎn)單易懂,單個(gè)函數(shù)的程序行數(shù)不得超過(guò)100行。1.2 打算干什么,要簡(jiǎn)單,直接了當(dāng),代碼精簡(jiǎn),避免垃圾程序。1.3 盡量使用標(biāo)準(zhǔn)庫(kù)函數(shù)和公共函數(shù)。
1.4 不要隨意定義全局變量,盡量使用局部變量。1.5 使用括號(hào)以避免二義性。
2.可讀性要求
2.1 可讀性第一,效率第二。2.2 保持注釋與代碼完全一致。
2.3 每個(gè)源程序文件,都有文件頭說(shuō)明,說(shuō)明規(guī)格見(jiàn)規(guī)范。2.4 每個(gè)函數(shù),都有函數(shù)頭說(shuō)明,說(shuō)明規(guī)格見(jiàn)規(guī)范。
2.5 主要變量(結(jié)構(gòu)、聯(lián)合、類或?qū)ο螅┒x或引用時(shí),注釋能反映其含義。2.7 常量定義(DEFINE)有相應(yīng)說(shuō)明。2.8 處理過(guò)程的每個(gè)階段都有相關(guān)注釋說(shuō)明。2.9 在典型算法前都有注釋。
2.10 利用縮進(jìn)來(lái)顯示程序的邏輯結(jié)構(gòu),縮進(jìn)量一致并以Tab鍵為單位,定義Tab為 6個(gè)字節(jié)。
2.11 循環(huán)、分支層次不要超過(guò)五層。
2.12 注釋可以與語(yǔ)句在同一行,也可以在上行。2.13 空行和空白字符也是一種特殊注釋。2.14 一目了然的語(yǔ)句不加注釋。
2.15 注釋的作用范圍可以為:定義、引用、條件分支以及一段代碼。2.16 注釋行數(shù)(不包括程序頭和函數(shù)頭說(shuō)明部份)應(yīng)占總行數(shù)的 1/5 到 1/3。
3.結(jié)構(gòu)化要求
3.1 禁止出現(xiàn)兩條等價(jià)的支路。3.2 禁止GOTO語(yǔ)句。
3.3 用 IF 語(yǔ)句來(lái)強(qiáng)調(diào)只執(zhí)行兩組語(yǔ)句中的一組。禁止 ELSE GOTO 和 ELSE RETURN。3.4 用 CASE 實(shí)現(xiàn)多路分支。3.5 避免從循環(huán)引出多個(gè)出口。3.6 函數(shù)只有一個(gè)出口。3.7 不使用條件賦值語(yǔ)句。3.8 避免不必要的分支。
3.9 不要輕易用條件分支去替換邏輯表達(dá)式。
4.正確性與容錯(cuò)性要求
4.1 程序首先是正確,其次是優(yōu)美
4.2 無(wú)法證明你的程序沒(méi)有錯(cuò)誤,因此在編寫(xiě)完一段程序后,應(yīng)先回頭檢查。4.3 改一個(gè)錯(cuò)誤時(shí)可能產(chǎn)生新的錯(cuò)誤,因此在修改前首先考慮對(duì)其它程序的影響。4.4 所有變量在調(diào)用前必須被初始化。4.5 對(duì)所有的用戶輸入,必須進(jìn)行合法性檢查。4.6 不要比較浮點(diǎn)數(shù)的相等,如: 10.0 * 0.1 == 1.0,不可靠
4.7 程序與環(huán)境或狀態(tài)發(fā)生關(guān)系時(shí),必須主動(dòng)去處理發(fā)生的意外事件,如文件能否 邏輯鎖定、打印機(jī)是否聯(lián)機(jī)等。
4.8 單元測(cè)試也是編程的一部份,提交聯(lián)調(diào)測(cè)試的程序必須通過(guò)單元測(cè)試。
5.可重用性要求
5.1 重復(fù)使用的完成相對(duì)獨(dú)立功能的算法或代碼應(yīng)抽象為公共控件或類。5.2 公共控件或類應(yīng)考慮OO思想,減少外界聯(lián)系,考慮獨(dú)立性或封裝性。5.3 公共控件或類應(yīng)建立使用模板。
附:C++ 編程規(guī)范,delphi作相應(yīng)的參考
.1適用范圍
本標(biāo)準(zhǔn)適用于利用Visul C++ ,Borland C++進(jìn)行軟件程序開(kāi)發(fā)的人員.。
.2變量命名
命名必須具有一定的實(shí)際意義,形式為xAbcFgh,x由變量類型確定,Abc、Fgh表示連續(xù)意 義字符串,如果連續(xù)意義字符串僅兩個(gè),可都大寫(xiě).如OK.具體例程:
BOOL類型
bEnable;
ch
*
char
chText c
*
類對(duì)象
cMain(對(duì)象實(shí)例)h
*
Handle(句柄)
hWnd i
*
int n
*
無(wú)符號(hào)整型 p
*
指針 sz,str *
字符串 w
WORD x,y
坐標(biāo)
Char或者TCHAR類型
與Windows API有直接聯(lián)系的用szAppName[10]形式否則用
FileName[10]形式,單個(gè)字符也可用小寫(xiě)字母表示;
Int類型
nCmdShow;
LONG類型
lParam;UINT類型
uNotify;
DWORD類型
dwStart;
PSTR類型
pszTip;
LPSTR類型
LPTSTR類型
LPVOID類型
WPARAM類型
LPARAM類型
HWND類型
HDC類型
HINSTANCE類型
HANDLE類型
HICON類型
int
float
DWORD
lpszClassName;lpReserved wParam, lParam hDlg;hDC;hInstance hInstance, hIcon;iTmp fTmp dw* 4
lpCmdLine
String , AnsiString
str *
m_
類成員變量
m_nVal, m_bFlag g_
全局變量
g_nMsg, g_bFlag
局部變量中可采用如下幾個(gè)通用變量:nTemp,nResult,I,J(一般用于循環(huán)變量)。
其他資源句柄同上
.3常量命名和宏定義
常量和宏定義必須具有一定的實(shí)際意義;
常量和宏定義在#include和函數(shù)定義之間;
常量和宏定義必須全部以大寫(xiě)字母來(lái)撰寫(xiě),中間可根據(jù)意義的連續(xù)性用下劃線連接,每一 條定義的右側(cè)必須有一簡(jiǎn)單的注釋,說(shuō)明其作用;
資源名字定義格式:
菜單:IDM_XX或者CM_XX
位圖:IDB_XX
對(duì)話框:IDD_XX
字符串:IDS_XX
DLGINIT:DIALOG_XX
ICON:IDR_XX
.4函數(shù)命名 函數(shù)原型說(shuō)明包括引用外來(lái)函數(shù)及內(nèi)部函數(shù),外部引用必須在右側(cè)注明函數(shù)來(lái)源: 模 塊名及文件名, 如是內(nèi)部函數(shù),只要注釋其定義文件名;
第一個(gè)字母必須使用大寫(xiě)字母,要求用大小寫(xiě)字母組合規(guī)范函數(shù)命名,必要時(shí)可用下劃線 間隔,示例如下:
void UpdateDB_Tfgd(TRACK_NAME);
//Module Name :r01/sdw.c
void PrintTrackData(TRACK_NAME);//Module Name :r04/tern.c
void ImportantPoint(void);
//Module Name :r01/sdw.c
void ShowChar(int , int , chtype);
//Local Module
void ScrollUp_V(int , int);
//Local Module
.5結(jié)構(gòu)體命名
結(jié)構(gòu)體類型命名必須全部用大寫(xiě)字母,原則上前面以下劃線開(kāi)始;結(jié)構(gòu)體變量命名必須用 大小寫(xiě)字母組合,第一個(gè)字母必須使用大寫(xiě)字母,必要時(shí)可用下劃線間隔。對(duì)于私有數(shù) 據(jù)區(qū),必須注明其所屬的進(jìn)程。全局?jǐn)?shù)據(jù)定義只需注意其用途。
示例如下:
typedef struct
{
char
szProductName[20];
char
szAuthor[20];
char
szReleaseDate[16];
char
szVersion[10];
unsigned long
MaxTables;
unsigned long
UsedTables;
}DBS_DATABASE;
DBS_DATABASE GdataBase;
控件的命名: 用小寫(xiě)前綴表示類別
用小寫(xiě)前綴表示類別: fm
窗口 cmd
按鈕
cob
combo,下拉式列表框 txt
文本輸入框 lab
labal,標(biāo)簽 img
image,圖象 pic
picture grd
Grid,網(wǎng)格 scr
滾動(dòng)條 lst
列表框 frm
fram
7注釋
原則上注釋要求使用中文;
文件開(kāi)始注釋內(nèi)容包括:公司名稱、版權(quán)、作者名稱、時(shí)間、模塊用途、背景介紹等,復(fù) 雜的算法需要加上流程說(shuō)明;
函數(shù)注釋包括:輸入、輸出、函數(shù)描述、流程處理、全局變量、調(diào)用樣例等,復(fù)雜的函數(shù) 需要加上變量用途說(shuō)明;
程序中注釋包括:修改時(shí)間和作者、方便理解的注釋等;
引用一: 文件開(kāi)頭的注釋模板
/******************************************************************
** 文件名:
** Copyright(c)1998-1999 *********公司技術(shù)開(kāi)發(fā)部
** 創(chuàng)建人:
** 日 期:
** 修改人:
** 日 期:
** 描 述: ** ** 版 本:
**---------------
******************************************************************/
引用二: 函數(shù)開(kāi)頭的注釋模板
/*****************************************************************
** 函數(shù)名:
** 輸 入: a,b,c
**
a---
**
b---
**
c---
** 輸 出: x---
**
x 為 1, 表示...**
x 為 0, 表示...** 功能描述:
** 全局變量:
** 調(diào)用模塊:
** 作 者:
** 日 期:
** 修 改:
** 日 期: ** 版本
****************************************************************/
引用三: 程序中的注釋模板
/*---------------------------*/
/* 注釋內(nèi)容
*/
/*---------------------------*/ 8 程序
a.程序編碼力求簡(jiǎn)潔,結(jié)構(gòu)清晰,避免太多的分支結(jié)構(gòu)及太過(guò)于技巧性的程序,盡量不采用遞歸模式。
b.編寫(xiě)程序時(shí),亦必須想好測(cè)試的方法,換句話說(shuō),”單元測(cè)試” 的測(cè)試方案應(yīng) 在程序編寫(xiě)時(shí)一并擬好。
c.注釋一定要與程序一致。
d.版本封存以后的修改一定要將老語(yǔ)句用/* */ 封閉,不能自行刪除或修改,并要 在文件及函數(shù)的修改記錄中加以記錄。
e.程序中每個(gè)block 的開(kāi)頭 ”{“ 及 ”}” 必須對(duì)齊,嵌套的block 每進(jìn)一套,縮進(jìn)一個(gè)tab,TAB 為4個(gè)空格,block類型包括if、for、while、do等關(guān)鍵字引出的。
f.對(duì)于比較大的函數(shù),每個(gè)block 和特殊的函數(shù)調(diào)用,都必須注明其功能,舉例如下
:
count.divisor = 1193280 / freq;
// compute the proper count
OutByte((unsigned short)67,(unsigned char)182);// tell 8253 that a count is coming
OutByte((unsigned short)66, count.c[0]);
// send low-order byte
OutByte((unsigned short)66, count.c[1]);
// send high-order byte
×××××××××××××××××××××××××××××××××××××××
bcb,delphi中的變量命名:
遵循匈牙利命名法,命 名必須有意義,制定如下規(guī)定
窗體: 以大寫(xiě)的W開(kāi)始,如About版權(quán)窗體,命名為WAbout
文件:以大寫(xiě)的F開(kāi)始,如About版權(quán)窗體,文件命名為FAbout.cpp
按鈕(Button):如退出按鈕,命名為btnExit ……
基類: 加base標(biāo)記,如報(bào)表基類,窗體命名為:WBaseRep, 文件命名為FBaseRep.cpp
第二篇:程序員必看30本經(jīng)典書(shū)籍
.net程序員必看30本經(jīng)典書(shū)籍
作者:admin 更新時(shí)間:2009-10-29 13:27 點(diǎn)擊:1152次
一.入門(mén)
1.《HTML與CSS入門(mén)經(jīng)典(第7版)》HTML入門(mén)
點(diǎn)評(píng):html語(yǔ)言的入門(mén),由于html極其簡(jiǎn)單所以同類其他書(shū)也可代替,本書(shū)并非經(jīng)典,本書(shū)擺在這里純屬占位!你可以用其他書(shū)代替。2.《C#入門(mén)經(jīng)典(第3版)》C#入門(mén)
點(diǎn)評(píng):經(jīng)典中的經(jīng)典,個(gè)人認(rèn)為是30本書(shū)里最重要的,雖然其他講C#的好書(shū)也很多但大多1.0版的,很多在書(shū)店已經(jīng)絕版,被《程序員》等機(jī)構(gòu)評(píng)選為2006年最受讀者喜愛(ài)的十大IT圖書(shū)之一。
3.《精通SQL--結(jié)構(gòu)化查詢語(yǔ)言詳解》SQL數(shù)據(jù)入門(mén)
點(diǎn)評(píng):不能說(shuō)很好,但也不差,感覺(jué)吃透全書(shū)也可以應(yīng)付如常SQL語(yǔ)句了。4.《專家門(mén)診--SQL SERVER開(kāi)發(fā)答疑200問(wèn)》SQL數(shù)據(jù)入門(mén) 點(diǎn)評(píng):好書(shū),正好結(jié)合上本,可惜的是不是Sqlserver2005。5.《SQL SERVER 2005基礎(chǔ)教程》SQL數(shù)據(jù)入門(mén)
點(diǎn)評(píng):書(shū)一般,不過(guò)還是很全的,和同類書(shū)比起來(lái)還是不錯(cuò)。
入門(mén)總結(jié):這幾本書(shū)學(xué)的快的話2個(gè)月,慢則數(shù)月,如果真的吃透基本上就打了很好的底子!當(dāng)然不能說(shuō)100%,很多東西還要后面的學(xué)習(xí)來(lái)發(fā)現(xiàn)不足,重新學(xué)習(xí)。作者h(yuǎn)ttp://blog.csdn.net/21aspnet/。二.基礎(chǔ)
6.《Programming ASP.NET中文版(第3版)》ASP.NET基礎(chǔ)
點(diǎn)評(píng):經(jīng)典中的經(jīng)典,全球經(jīng)典,五年三版,權(quán)威著作,這本書(shū)是最最基礎(chǔ)的ASP.NET入門(mén)書(shū),講的非常全涵蓋所有基本面,每一個(gè)控件都細(xì)細(xì)說(shuō)明,非常易懂,不過(guò)本書(shū)講的難免有點(diǎn)雜,初學(xué)者看了難免云里霧里所以要下一本書(shū)提綱挈領(lǐng),此書(shū)非看不可。7.《ASP.NET 2.0經(jīng)典教程--C#篇》ASP.NET基礎(chǔ)
點(diǎn)評(píng):經(jīng)典,和上一本結(jié)合起來(lái)最好,本書(shū)講大的方面,看了能讓人明白asp.net分那幾個(gè)步驟,不過(guò)唯一的缺陷就是不細(xì),上一本正好補(bǔ)充,此書(shū)非看不可。8.《C#高級(jí)編程(第4版)》C#基礎(chǔ)
點(diǎn)評(píng):好書(shū)卻不經(jīng)典,本書(shū)被吹噓的神乎其神,被評(píng)選為2005年最權(quán)威的十大IT圖書(shū)之一,2006年最受讀者喜愛(ài)的十大IT圖書(shū)之一,其實(shí)本書(shū)不過(guò)講了一些其他書(shū)沒(méi)有的內(nèi)容而已,內(nèi)容比較多而已,本書(shū)也是所有.NET書(shū)中字?jǐn)?shù)最多的一本,蠻厚的,可以當(dāng)作C#語(yǔ)法的提高,做參考書(shū)吧,不過(guò)總體而言寫(xiě)的還是可以。作者h(yuǎn)ttp://blog.csdn.net/21aspnet/ 9.《JAVASCRIPT 權(quán)威指南(第四版)》Javascript基礎(chǔ)
點(diǎn)評(píng):好書(shū)卻不經(jīng)典,這本書(shū)也被吹噓的神乎其神,其實(shí)后半部分全部是Javascript語(yǔ)法參考,感覺(jué)本書(shū)只能做參考書(shū),講語(yǔ)法還是可以的講的還算深,內(nèi)容也很詳,不過(guò)看懂前半部分后來(lái)喜歡它的原因卻變后半部分,和下一本結(jié)合就成更完美的參考書(shū)。
10.《WEB開(kāi)發(fā)人員參考大全:最完整的HTML、CSS與JAVASCRIPT工具書(shū)》Javascript,html,css基礎(chǔ) 點(diǎn)評(píng):好書(shū),書(shū)如其名,作者是位老先生,經(jīng)驗(yàn)很豐富,本書(shū)是每一位從事BS開(kāi)發(fā)人員的必備參考書(shū)和上一本結(jié)合就更好了。
11.《SQLServer2005從入門(mén)與精通(應(yīng)用技術(shù)基礎(chǔ))》SQLServer基礎(chǔ)
點(diǎn)評(píng):好書(shū),可以幫助讀者對(duì)SQLServer增進(jìn)了解,畢竟是微軟出版社的,書(shū)中講的知識(shí)都是開(kāi)發(fā)人員必備的,例如聚合函數(shù),嵌套事務(wù),報(bào)表等等。
基礎(chǔ)總結(jié):這幾本書(shū)學(xué)的估計(jì)要4個(gè)月了,慢的話半年都不一定學(xué)透,其實(shí)日后開(kāi)發(fā)中用到的主要就是這個(gè)時(shí)候?qū)W的基礎(chǔ)上綜合應(yīng)用,寧慢勿快?。∪?應(yīng)用
12.《JavaScript 高級(jí)程序設(shè)計(jì)》javascript應(yīng)用
點(diǎn)評(píng):經(jīng)典,比《JAVASCRIPT 權(quán)威指南(第四版)》講應(yīng)用講得多,有Ajax部分,作者希望大家能把javascript按面相對(duì)象的思想處理。
13.《圣殿祭司的ASP.NET 2.0開(kāi)發(fā)詳解——使用C#》asp.net應(yīng)用
點(diǎn)評(píng):好書(shū),作者是臺(tái)灣的,感覺(jué)臺(tái)灣作者都有歐美風(fēng)格,本書(shū)是專門(mén)針對(duì)2.0新增的部分,沒(méi)有1.1部分,個(gè)人感覺(jué)這樣對(duì)1.1的作者很好,只要看這本書(shū)就夠了。14.《ASP.NET 2.0高級(jí)編程(第4版)》asp.net應(yīng)用
點(diǎn)評(píng):好書(shū),出到第4版了,和《C#高級(jí)編程(第4版)》有的一拼,也是大部頭,講的很全,不過(guò)不覺(jué)得有多少閃光的地方,權(quán)作參考書(shū)吧。15.《Beginning C# Objects中文版——概念到代碼》C#應(yīng)用
點(diǎn)評(píng):好書(shū),講C#怎么面向?qū)ο蟮倪€講了UML以及建模的方法同時(shí)譯者得水品很高。不會(huì)面向?qū)ο笫呛芸膳碌?,?dāng)然光會(huì)面向?qū)ο笠膊粔蜻€要和重構(gòu)設(shè)計(jì)模式極限編程結(jié)合。16.《ASP.NET 2.0數(shù)據(jù)庫(kù)入門(mén)經(jīng)典(第4版)》ADO.NET應(yīng)用
點(diǎn)評(píng):雞肋,可惜的是這本書(shū)是Beta版本但是出版社不知道出于什么原因沒(méi)有寫(xiě)明Beta版本,而且代碼是VB.NET,不過(guò)這本書(shū)講數(shù)據(jù)操作ADO.NET還是很全的最起碼讓初學(xué)者明白個(gè)大概。正式版有E文的,大家自己找吧。
17.《SQL Server 2005數(shù)據(jù)庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)》SQLServer2005應(yīng)用
點(diǎn)評(píng):好書(shū),作者是章立民老師,臺(tái)灣4屆MVP,想想當(dāng)初本人就是看他書(shū)入門(mén)的,這是一本公認(rèn)的很好入門(mén)書(shū)籍。作者h(yuǎn)ttp://blog.csdn.net/21aspnet/ 18.《ASP.NET2.0 經(jīng)典案例教程》ASP.NET應(yīng)用
點(diǎn)評(píng):好書(shū),講了幾個(gè)經(jīng)典例子,學(xué)了許多知識(shí)總是要用實(shí)例串起來(lái)的也是在這個(gè)過(guò)程中學(xué)習(xí)一些架構(gòu)只是。
應(yīng)用:這幾本書(shū)學(xué)的估計(jì)要4個(gè)月,慢的話半年都不一定學(xué)透,這個(gè)時(shí)候主要擴(kuò)大知識(shí)面,要結(jié)合實(shí)例,最好是做做留言板之類的小小項(xiàng)目。四.提高
19.《ASP.NET2.0XML高級(jí)編程(第3版)》XML數(shù)據(jù)提高
點(diǎn)評(píng):好書(shū),小黑寫(xiě)的很好,涵蓋了XML在asp.net下的方方面面,遇到不明白的要多讀幾遍。講XML的書(shū)不多,不過(guò)有這本也就夠了。20.《Ajax實(shí)戰(zhàn)》Ajax實(shí)戰(zhàn)應(yīng)用
點(diǎn)評(píng):好書(shū),2006年是中國(guó)出版界的Ajax年,感覺(jué)同系列(另2本是《Ajax基礎(chǔ)教程》《Ajax高級(jí)編程》)中這本最好,講理論將的很全,不過(guò)要有Javascript基礎(chǔ)的,寫(xiě)的很深個(gè)別地方有點(diǎn)啰唆。其實(shí)Ajax就是無(wú)刷新,現(xiàn)在微軟已經(jīng)推出許多控件大大減輕大家學(xué)習(xí),自己編碼的難度了。
21.《.NET安全編程》數(shù)據(jù)提高
點(diǎn)評(píng):好書(shū),安全和加密是不容忽視的。書(shū)中講到了散列算法,對(duì)稱加密,數(shù)字簽名,安全策略等等適用的安全知識(shí)!
22.《ASP.NET 2.0技術(shù)內(nèi)幕》asp.net提高
點(diǎn)評(píng):好書(shū),英文版是絕對(duì)的好書(shū),微軟出版社出版的絕對(duì)不會(huì)差!不過(guò)此書(shū)不適合初學(xué)者,初學(xué)者最好看會(huì)《Programming ASP.NET中文版(第3版)》再看此書(shū)。本書(shū)講了事件模型,數(shù)據(jù)綁定模型,網(wǎng)頁(yè)狀態(tài),緩存,會(huì)話等內(nèi)容。作者h(yuǎn)ttp://blog.csdn.net/21aspnet/ 23.《框架設(shè)計(jì)(第2版):CLR Via C#》C#提高
點(diǎn)評(píng):經(jīng)典,微軟出版社出版的,作者作為深受編程人員愛(ài)戴和尊敬的編程專家,微軟.NET開(kāi)發(fā)團(tuán)隊(duì)的顧問(wèn)!本書(shū)第一本和他的修訂版非常暢銷,本書(shū)讓大家從更深層次了解CLR,提高對(duì).NET的整體把握。不看此書(shū)看遍千本也枉然!24.《VISUAL C# 2005文件IO與數(shù)據(jù)存取秘訣》數(shù)據(jù)應(yīng)用
點(diǎn)評(píng):好書(shū),作者是章立民老師,臺(tái)灣4屆MVP,想想當(dāng)初本人就是看他書(shū)入門(mén)的,這也是一本公認(rèn)的很好入門(mén)書(shū)籍。開(kāi)始還以為全書(shū)講文件IO操作,其實(shí)就前面一點(diǎn),后面更多的是講程序和數(shù)據(jù)庫(kù)交互。
25.《EFFECTIVE C#中文版:改善C#程序的50種方法》C#應(yīng)用
點(diǎn)評(píng):非常實(shí)用的書(shū),譯者水平很高,不過(guò)這本書(shū)一度跳票幾年,07年4月才出。本書(shū)由50個(gè)小主題組成,就如何高效地使用C#語(yǔ)言和.NET庫(kù),為程序員們提供了一些實(shí)用的建議,而這些問(wèn)題都是經(jīng)常遇見(jiàn)的。本書(shū)主要還是講1.1的,2.0只在最后提了下。提高:這幾本書(shū)學(xué)的估計(jì)要4個(gè)月,慢的話幾年都搞不定,這個(gè)時(shí)候相信在知識(shí)的廣度深度結(jié)合度上都有了很大提高。五.飛躍
26.《ASP.NET AJAX程序設(shè)計(jì)-第I卷:服務(wù)器端ASP.NET 2.0 AJAX EXTENSIONS與ASP.NET AJAX CONTROL TOOLKIT》Ajax飛躍
點(diǎn)評(píng):好書(shū),以前很多復(fù)雜的Ajax和javascript代碼被微軟整合為控件,本書(shū)主要主要介紹這個(gè),作者在微軟工作。
27.《ASP.NET 2.0高級(jí)編程》asp.net飛躍
點(diǎn)評(píng):好書(shū),作者是《ASP.NET 2.0技術(shù)內(nèi)幕》的作者,感覺(jué)是在那本書(shū)上的再提高,講了ASP.NET內(nèi)部機(jī)理,HTTP處理程序和模塊,自定義控件等高級(jí)專題。28.《重構(gòu)-改善既有代碼的設(shè)計(jì)(中文版)》語(yǔ)言飛躍
點(diǎn)評(píng):不朽的著作,重構(gòu)和設(shè)計(jì)模式齊名,這本書(shū)需要用一生來(lái)學(xué)習(xí),本書(shū)是用其他語(yǔ)言所寫(xiě)。不過(guò)會(huì)C#的人應(yīng)該能看懂。29.《C#設(shè)計(jì)模式》C#飛躍
點(diǎn)評(píng):一般,由于設(shè)計(jì)模式的代表作《設(shè)計(jì)模式--可復(fù)用面向?qū)ο筌浖幕A(chǔ)》年代久遠(yuǎn)而且是用其他語(yǔ)言寫(xiě)的目前市面上也只有這本,其實(shí)《C#設(shè)計(jì)模式》的作者最初寫(xiě)了Java版本的,書(shū)店有,所以估計(jì)就是把語(yǔ)言換成C#。30.《ADO.NET 2.0高級(jí)編程》C#飛躍
點(diǎn)評(píng):還可以,講了ADO.NET的高級(jí)主題非連接類,關(guān)聯(lián)的非連接數(shù)據(jù),事務(wù),元數(shù)據(jù),大型對(duì)象等。
飛躍:這幾本書(shū)學(xué)的估計(jì)要很久很久,看個(gè)人造化。
最后的總結(jié):按照整個(gè)流程學(xué)習(xí),有問(wèn)題找CSDN論壇,結(jié)合MSDN,baidu,Google沒(méi)有解決不了的問(wèn)題。成為中級(jí)程序員以后就要朝高級(jí)程序員發(fā)展。
(責(zé)任編輯:admin)
第三篇:C語(yǔ)言C++程序員編程必備
Java,NET,PHP,Ruby,Perl 和 Python 等,但今天我們要討論的是兩個(gè)最古老和流行的語(yǔ)言的C和C++。它們都有其特殊的地方,更有效的功能和支持的工具,這兩種語(yǔ)言仍然很活躍。
今天我們整理了一些令人印象深刻的IDE(集成開(kāi)發(fā)環(huán)境)和編譯器推薦給 C 和 C++ 程序員。集成開(kāi)發(fā)環(huán)境,主要用于提供軟件應(yīng)用的各種組件而開(kāi)發(fā)的,其中最流行的功能是它們都有吸引力的用戶界面。1)Best IDE for C/C++ – kDevelop KDevelop 是基于 KDevPlatform 的可使用開(kāi)源插件擴(kuò)展的 IDE。KDevPlatform 是一種可以用來(lái)作為 IDE 的基礎(chǔ)庫(kù)的開(kāi)源集。
2)Best IDE for C/C++-Anjuta Anjuta Devstudio 具有先進(jìn)的編程工具,包括項(xiàng)目管理,應(yīng)用程序向?qū)В换ナ秸{(diào)試器,源代碼編輯器,版本控制,GUI設(shè)計(jì)器,分析器和許多工具,另一個(gè)偉大的開(kāi)發(fā)工作室。此工具提供的 C/C++ 程序員有很大強(qiáng)大的用戶界面開(kāi)發(fā)接口。
3)Best IDE for C/C++Eclipse CDT Eclipse CD 是最強(qiáng)大和最流行的IDE之一,提供了更高效的功能,如:項(xiàng)目的創(chuàng)建和管理,構(gòu)建支持不同的工具鏈,標(biāo)準(zhǔn)make編譯,源代碼導(dǎo)航,各種來(lái)源的知識(shí)工具,代碼編輯器,語(yǔ)法高亮,折疊和超鏈接導(dǎo)航,源代碼重構(gòu)和代碼生成,可視化調(diào)試工具,包括內(nèi)存,寄存器等等。
7)Best IDE for C/C++ – Compilr Compilr 是在線集成開(kāi)發(fā)工具,讓您與令人印象深刻的功能和簡(jiǎn)單的用戶界面編寫(xiě)代碼。該工具支持的編程語(yǔ)言中廣泛的C,C + + JAVA,HTML等等。
8)Best IDE for C/C++Netbeans C++ Netbeans 的工具包括許多適合 C 和 C++ 項(xiàng)目類型模板,可以 使用動(dòng)態(tài)庫(kù)和靜態(tài)創(chuàng)建 C/C++ 應(yīng)用程序庫(kù)。它擁有迷人的功能:代碼協(xié)助,編譯器配置,單元測(cè)試,源檢查,遠(yuǎn)程開(kāi)發(fā)和文件導(dǎo)航等等。
10)Best IDE/Compiler for C/C++Ultimate++ Ultimate++是對(duì)于 C++ 程序員來(lái)說(shuō)是很好框架。這個(gè) IDE 引入了模塊化概念,可以結(jié)合 GCC,MinGW 和 Visual C++。
12)Best Compiler for C/C++-Digital Mars DigitalMars 是一款高性能的 C/C++ 編譯器。包括的功能,如速度最快的編譯/鏈接時(shí),強(qiáng)
HTML文檔,反匯編,圖書(shū)管理員,資源編譯器,make等,命令行和GUI版本,教程,代碼示例,在線更新,標(biāo)準(zhǔn)模板庫(kù)等等。
13)Best IDE for C-C-Free
14)Best Compiler for C/C++ – MinGW MinGW 編譯器提供訪問(wèn)微軟的C運(yùn)行庫(kù)和一些特定語(yǔ)言運(yùn)行庫(kù)的功能。
15)Best Compiler for C – Tiny C Compiler iny C Compiler 是最好的編譯器之一,讓開(kāi)發(fā)人員可以在任何地方編譯代碼,可以使用任何 C 動(dòng)態(tài)庫(kù),編譯并直接執(zhí)行C++源程序,也包含完整的 C 預(yù)處理器和 GNU 匯編器。
@扣丁學(xué)堂 智悅分享
第四篇:學(xué)習(xí)Java編程,就只能做Java程序員嗎?
學(xué)習(xí)Java編程,就只能做Java程序員嗎?
作為世界上使用最廣的語(yǔ)言之一,Java 的擁躉和其他語(yǔ)言的粉絲常常在各大論壇掀起世界大戰(zhàn)。
Java 說(shuō)『Write Once,Run Anywhere』
但還有人說(shuō) 『Write Once,Debug Anywhere』
有人說(shuō)他語(yǔ)法簡(jiǎn)單,功能強(qiáng)大。
可也有人說(shuō)與許多新興語(yǔ)言相比,他有些細(xì)節(jié)上的不足。
所以,Java 對(duì)你來(lái)說(shuō)究竟是什么?
你可曾想過(guò),學(xué)習(xí)Java編程之后,你就只能做Java程序員嗎?其實(shí)。。
學(xué)習(xí)Java編程可以往很多方向發(fā)展
Java的應(yīng)用非常廣,有erp等大型系統(tǒng)方面的,有web方面的,還有游戲方面的。作為小白,你需要從Java初級(jí)學(xué),然后中級(jí),之后你還需要再學(xué)習(xí)更多的技術(shù),這些技術(shù)不僅僅局限于Java,如js和數(shù)據(jù)庫(kù)等,當(dāng)你對(duì)整套技術(shù)都非常精通時(shí),你便是一個(gè)真正的高級(jí)工程師,而java則只是你所掌握的主要技術(shù)之一罷了。
做軟件測(cè)試是一個(gè)方向
不少人學(xué)到Java SE基礎(chǔ)階段,可能往軟件測(cè)試方向發(fā)展,這個(gè)時(shí)候參與具體的編碼工作不會(huì)那么多,主要要做的工作是對(duì)軟件產(chǎn)品的需求文檔、設(shè)計(jì)文檔等檢查是否有歧義,對(duì)軟件產(chǎn)品本身的功能、性能通過(guò)運(yùn)用專業(yè)的軟件測(cè)試技術(shù)以及工作去發(fā)現(xiàn)軟件產(chǎn)品中隱藏的軟件問(wèn)題。
轉(zhuǎn)Android開(kāi)發(fā)是一個(gè)方向
Android是主流智能手機(jī)的操作系統(tǒng),Java是一種開(kāi)發(fā)語(yǔ)言,兩者沒(méi)有好壞優(yōu)劣之分,只是兩種職業(yè)崗位的選擇。學(xué)Android從事移動(dòng)互聯(lián)方向開(kāi)發(fā),學(xué)Java從事軟件、網(wǎng)站開(kāi)發(fā)。而安卓上的應(yīng)用大多是Java編寫(xiě)的,所以學(xué)習(xí)了Java編程,轉(zhuǎn)Android開(kāi)發(fā)也是可以的。
轉(zhuǎn)web前端開(kāi)發(fā)、PHP開(kāi)發(fā)、大數(shù)據(jù)。。
其實(shí),Java對(duì)你來(lái)說(shuō),不過(guò)是眾多戀人之一,作為初戀,她打開(kāi)了你學(xué)習(xí)編程的大門(mén)。至于以后你是從事前端開(kāi)發(fā),或PHP開(kāi)發(fā),亦或Android開(kāi)發(fā),甚至搞大數(shù)據(jù)、數(shù)據(jù)庫(kù),這些都是互不干擾的。
你的程序猿生涯,從踹開(kāi)Java大門(mén)開(kāi)始 圍觀知了堂Java大咖竹邇【提神的咖啡】
第五篇:軟件編程規(guī)范總結(jié)
軟件編程規(guī)范總結(jié)
本規(guī)范的內(nèi)容包括:基本原則、布局、注釋、命名規(guī)則、變量常量與類型、表達(dá)式與語(yǔ)句、函數(shù)與過(guò)程、可靠性、可測(cè)性、斷言與錯(cuò)誤處理等。
一、基本原則
1.2.3.4.5.6.7.保持代碼的簡(jiǎn)明清晰,避免過(guò)分的編程技巧。所有的代碼盡量遵循ANSI C標(biāo)準(zhǔn)。
編程時(shí)首先達(dá)到正確性,其次考慮效率。避免或少用全局變量。盡量避免使用GOTO語(yǔ)句。盡可能重用、修正老的代碼。盡量減少同樣的錯(cuò)誤出現(xiàn)的次數(shù)。
二、文件布局
1.頭文件必須要避免重復(fù)包含。
2.包含標(biāo)準(zhǔn)庫(kù)頭文件用尖括號(hào) <>,包含非標(biāo)準(zhǔn)庫(kù)頭文件用雙引號(hào) “”。3.遵循統(tǒng)一的順序書(shū)寫(xiě)類的定義及實(shí)現(xiàn)。類的定義(在定義文件中)按如下順序書(shū)寫(xiě):
公有屬性
公有函數(shù)
保護(hù)屬性
保護(hù)函數(shù)
私有屬性
私有函數(shù)
類的實(shí)現(xiàn)(在實(shí)現(xiàn)文件中)按如下順序書(shū)寫(xiě):
構(gòu)造函數(shù)
析構(gòu)函數(shù) 公有函數(shù) 保護(hù)函數(shù) 私有函數(shù)
4.程序中一行的代碼和注釋不能超過(guò)80列。5.定義指針類型的變量,*應(yīng)放在變量前。
6.源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰。iLength iWidth = 10;
= 5;// 矩形的長(zhǎng)與寬關(guān)系較密切,放在一起。
StrCaption = “Test”;
7.禁止使用TAB鍵,必須使用空格進(jìn)行縮進(jìn)。縮進(jìn)為4個(gè)空格。
8.程序的分界符‘{’和‘}’應(yīng)獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語(yǔ)句左對(duì)齊。{ }之內(nèi)的代碼塊使用縮進(jìn)規(guī)則對(duì)齊。
9.if、else、else if、for、while、do等語(yǔ)句自占一行,執(zhí)行語(yǔ)句不得緊跟其后。不論執(zhí)行語(yǔ)句有多少都要加 { }。
if(varible1 < varible2){
varible1 = varible2;}
10.11.聲明類的時(shí)候,public、protected、private關(guān)鍵字與分界符{} 對(duì)齊,這些部分的內(nèi)容要進(jìn)行縮進(jìn)。
12.結(jié)構(gòu)型的數(shù)組、多維的數(shù)組如果在定義時(shí)初始化,按照數(shù)組的矩陣結(jié)構(gòu)分行書(shū)寫(xiě)。13.相關(guān)的賦值語(yǔ)句等號(hào)對(duì)齊。
14.在switch語(yǔ)句中,每一個(gè)case分支和default要用{ }括起來(lái),{ }中的內(nèi)容需要縮進(jìn)。
15.不同邏輯程序塊之間要使用空行分隔。16.一元操作符如“!”、“~”、“++”、“--”、“*”、“&”(地址運(yùn)算符)等前后不加空格。“[]”、“.”、“->”這類操作符前后不加空格。
17.多元運(yùn)算符和它們的操作數(shù)之間至少需要一個(gè)空格。18.關(guān)鍵字之后要留空格。(if、for、while等關(guān)鍵字之后應(yīng)留一個(gè)空格再跟左括號(hào)‘(’,以突出關(guān)鍵字。)
19.函數(shù)名之后不要留空格。(函數(shù)名后緊跟左括號(hào)‘(’,以與關(guān)鍵字區(qū)別。)20.(’向后緊跟,‘)’、‘,’、‘;’向前緊跟,緊跟處不留空格?!?’之后要留空格?!?’不是行結(jié)束符號(hào)時(shí)其后要留空格。
21.長(zhǎng)表達(dá)式(超過(guò)80列)要在低優(yōu)先級(jí)操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊。
22.函數(shù)聲明時(shí),類型與名稱不允許分行書(shū)寫(xiě)。
三、注釋
1.一般情況下,源程序有效注釋量必須在20%以上。2.注釋符與注釋內(nèi)容之間要用一個(gè)空格進(jìn)行分隔。
3.文件頭部必須進(jìn)行注釋,包括:.h文件、.c文件、.cpp文件、.inc文件、.def文件、編譯說(shuō)明文件.cfg等。
4.函數(shù)頭部應(yīng)進(jìn)行注釋,列出:函數(shù)的目的/功能、輸入?yún)?shù)、輸出參數(shù)、返回值、訪問(wèn)和修改的表、修改信息等。
5.包含在{ }中代碼塊的結(jié)束處應(yīng)加注釋,便于閱讀。特別是多分支、多重嵌套的條件語(yǔ)句或循環(huán)語(yǔ)句。
void Main(){
if(…){
… while(…)
{
…
} /* end of while(…)*/ …
} /* end of if(…)*/ // 指明是哪條語(yǔ)句結(jié)束 } /* end of void main()*/
// 指明函數(shù)的結(jié)束 // 指明該條while語(yǔ)句結(jié)束
6.保證代碼和注釋的一致性。修改代碼同時(shí)修改相應(yīng)的注釋,不再有用的注釋要?jiǎng)h除。7.注釋?xiě)?yīng)與其描述的代碼相近,對(duì)代碼的注釋?xiě)?yīng)放在其上方或右方(對(duì)單條語(yǔ)句的注釋)相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開(kāi)。
8.全局變量要有詳細(xì)的注釋,包括對(duì)其功能、取值范圍、訪問(wèn)信息及訪問(wèn)時(shí)注意事項(xiàng)等的說(shuō)明。
9.注釋與所描述內(nèi)容進(jìn)行同樣的縮排。
10.對(duì)分支語(yǔ)句(條件分支、循環(huán)語(yǔ)句等)必須編寫(xiě)注釋。11.盡量避免在注釋中使用縮寫(xiě),特別是不常用縮寫(xiě)。
四、命名規(guī)則
1.標(biāo)識(shí)符要采用英文單詞或其組合,便于記憶和閱讀,切忌使用漢語(yǔ)拼音來(lái)命名。嚴(yán)格禁止使用連續(xù)的下劃線,下劃線也不能出現(xiàn)在標(biāo)識(shí)符頭或結(jié)尾(預(yù)編譯開(kāi)關(guān)除外)。
2.程序中不要出現(xiàn)僅靠大小寫(xiě)區(qū)分的相似的標(biāo)識(shí)符。
3.用正確的反義詞組命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等。
4.宏、常量名都要使用大寫(xiě)字母, 用下劃線 ‘_’分割單詞。預(yù)編譯開(kāi)關(guān)的定義使用下劃線 ‘_’開(kāi)始。
5.變量名長(zhǎng)度應(yīng)小于31個(gè)字符,以保持與ANSI C標(biāo)準(zhǔn)一致。不得取單個(gè)字符(如i、j、k等)作為變量名,但是局部循環(huán)變量除外。
6.程序中局部變量不要與全局變量重名。7.使用一致的前綴來(lái)區(qū)分變量的作用域。
g_
:全局變量 s_
:模塊內(nèi)靜態(tài)變量
空:局部變量不加范圍前綴
8.使用一致的小寫(xiě)類型指示符作為前綴來(lái)區(qū)分變量的類型。說(shuō)明:常用變量類型前綴列表如下:
i
: int
f
: float d : double c
: char uc
: unsigned char 或 BYTE l : long p
: pointer b
: BOOL h : HANDLE w
: unsigned short 或 WORD dw : DWORD或 unsigned long a
:數(shù)組,array of TYPE str
:字符串 t :結(jié)構(gòu)類型
9.完整的變量名應(yīng)由前綴+變量名主體組成,變量名的主體應(yīng)當(dāng)使用“名詞”或者“形容詞+名詞”,且首字母必須大寫(xiě)。
float g_fValue;10.函數(shù)名用大寫(xiě)字母開(kāi)頭的單詞組合而成,且應(yīng)當(dāng)使用“動(dòng)詞”或者“動(dòng)詞+名詞”(動(dòng)賓詞組)。
11.結(jié)構(gòu)名、聯(lián)合名、枚舉名由前綴T_ 開(kāi)頭。事件名由前綴EV_ 開(kāi)頭。12.標(biāo)識(shí)符前最好不加項(xiàng)目、產(chǎn)品、部門(mén)的標(biāo)識(shí)。
五、變量常量與類型
1.定義全局變量時(shí)必須仔細(xì)分析,明確其含義、作用、取值范圍及與其它全局變量間的關(guān)系。
2.明確全局變量與操作此全局變量的函數(shù)或過(guò)程的關(guān)系。3.一個(gè)變量有且只有一個(gè)功能,不能把一個(gè)變量用作多種用途。4.循環(huán)語(yǔ)句與判斷語(yǔ)句中,不允許對(duì)其它變量進(jìn)行計(jì)算與賦值。5.宏定義中如果包含表達(dá)式或變量,表達(dá)式和變量必須用小括號(hào)括起來(lái)。6.使用宏定義多行語(yǔ)句時(shí), 必須使用 { } 把這些語(yǔ)句括起來(lái)。
建議:
? 盡量構(gòu)造僅有一個(gè)模塊或函數(shù)可以修改、創(chuàng)建的全局變量,而其余有關(guān)模塊或函數(shù)只能訪問(wèn)。
? 對(duì)于全局變量通過(guò)統(tǒng)一的函數(shù)訪問(wèn)。
? 盡量使用const說(shuō)明常量數(shù)據(jù),對(duì)于宏定義的常數(shù),必須指出其類型。? 最好不要在語(yǔ)句塊內(nèi)聲明局部變量。
7.結(jié)構(gòu)和聯(lián)合必須被類型化。typedef struct {
char acName[NAME_SIZE];WORD wScore;} T_Student;
T_Student *ptStudent;
建議:
? 使用嚴(yán)格形式定義的、可移植的數(shù)據(jù)類型,盡量不要使用與具體硬件或軟件環(huán)境關(guān)系密切的變量。
? 結(jié)構(gòu)是針對(duì)一種事務(wù)的抽象,功能要單一,不要設(shè)計(jì)面面俱到的數(shù)據(jù)結(jié)構(gòu)。? 不同結(jié)構(gòu)間的關(guān)系要盡量簡(jiǎn)單,若兩個(gè)結(jié)構(gòu)間關(guān)系較復(fù)雜、密切,那么應(yīng)合為一個(gè)結(jié)構(gòu)。
? 結(jié)構(gòu)中元素的個(gè)數(shù)應(yīng)適中。若結(jié)構(gòu)中元素個(gè)數(shù)過(guò)多可考慮依據(jù)某種原則把元素組成不同的子結(jié)構(gòu),以減少原結(jié)構(gòu)中元素的個(gè)數(shù)。
? 仔細(xì)設(shè)計(jì)結(jié)構(gòu)中元素的布局與排列順序,使結(jié)構(gòu)容易理解、節(jié)省占用空間,并減少引起誤用現(xiàn)象,對(duì)于結(jié)構(gòu)中未用的位明確地給予保留。
? 結(jié)構(gòu)的設(shè)計(jì)要盡量考慮向前兼容和以后的版本升級(jí),并為某些未來(lái)可能的應(yīng)用保留余地(如預(yù)留一些空間等)。
? 合理地設(shè)計(jì)數(shù)據(jù)并使用自定義數(shù)據(jù)類型,盡量減少?zèng)]有必要的數(shù)據(jù)類型默認(rèn)轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換。
? 當(dāng)聲明數(shù)據(jù)結(jié)構(gòu)時(shí),必須考慮機(jī)器的字節(jié)順序、使用的位域及字節(jié)對(duì)齊等問(wèn)題。
六、表達(dá)式與語(yǔ)句
1.在表達(dá)式中使用括號(hào),使表達(dá)式的運(yùn)算順序更清晰。
if(((iYear % 4 == 0)&&(iYear % 100!= 0))||(iYear % 400 == 0))2.避免表達(dá)式中的附加功能,不要編寫(xiě)太復(fù)雜的復(fù)合表達(dá)式。3.不可將浮點(diǎn)變量用“==”或“!=”與任何數(shù)字比較。
4.應(yīng)當(dāng)將指針變量用“==”或“!=”與NULL比較。
5.在switch語(yǔ)句中,每一個(gè)case分支必須使用break結(jié)尾,最后一個(gè)分支必須是default分支。
6.不可在for 循環(huán)體內(nèi)修改循環(huán)變量,防止for 循環(huán)失去控制。
建議:
? 循環(huán)嵌套次數(shù)不大于3次。
? do while語(yǔ)句和while語(yǔ)句僅使用一個(gè)條件。? 當(dāng)switch語(yǔ)句的分支比較多時(shí),采用數(shù)據(jù)驅(qū)動(dòng)方式。
如果循環(huán)體內(nèi)存在邏輯判斷,并且循環(huán)次數(shù)很大,宜將邏輯判斷移到循環(huán)體的外面。
? for語(yǔ)句的循環(huán)控制變量的取值采用“半開(kāi)半閉區(qū)間”寫(xiě)法。? 在進(jìn)行“==”比較時(shí),將常量或常數(shù)放在“==”號(hào)的左邊。
七、參數(shù)
1.如果函數(shù)沒(méi)有參數(shù),則用void填充。
void SetValue(int iWidth, int iHeight);float GetValue(void);2.如果參數(shù)是指針,且僅作輸入用,則應(yīng)在類型前加const。(防止該指針在函數(shù)體內(nèi)被意外修改。)
3.當(dāng)結(jié)構(gòu)變量作為參數(shù)時(shí),應(yīng)傳送結(jié)構(gòu)的指針而不傳送整個(gè)結(jié)構(gòu)體,并且不得修改結(jié)構(gòu)中的元素,用作輸出時(shí)除外。
4.不要省略返回值的類型,如果函數(shù)沒(méi)有返回值,那么應(yīng)聲明為void類型。5.對(duì)于有返回值的函數(shù),每一個(gè)分支都必須有返回值。(為了保證對(duì)被調(diào)用函數(shù)返回值的判斷,有返回值的函數(shù)中的每一個(gè)退出點(diǎn)都需要有返回值)
6.對(duì)輸入?yún)?shù)的正確性和有效性進(jìn)行檢查。7.防止將函數(shù)的參數(shù)作為工作變量。
void SumData(int iNum, int *piData, int *piSum){
int iCount;
int iSumTmp;// 存儲(chǔ)“和”的臨時(shí)變量
iSumTmp = 0;
for(iCount = 0;iCount < iNum;iCount++)
{
iSumTmp += piData[iCount];}
*piSum = iSumTmp;} 反例:
void SumData(int iNum, int *piData, int *piSum){
int iCount;
*piSum = 0;
for(iCount = 0;iCount < iNum;iCount++){
*piSum += piData[iCount];// piSum成了工作變量,不好。} }
8.必須對(duì)所調(diào)用函數(shù)的錯(cuò)誤返回值進(jìn)行處理。(函數(shù)返回錯(cuò)誤,往往是因?yàn)檩斎氲膮?shù)不合法,或者此時(shí)系統(tǒng)已經(jīng)出現(xiàn)了異常。如果不對(duì)錯(cuò)誤返回值進(jìn)行必要的處理,會(huì)導(dǎo)致錯(cuò)誤的擴(kuò)大,甚至導(dǎo)致系統(tǒng)的崩潰。)
八、可靠性
1.在程序編制之前,必須了解編譯系統(tǒng)的內(nèi)存分配方式,特別是編譯系統(tǒng)對(duì)不同類型的變量的內(nèi)存分配規(guī)則,如局部變量在何處分配、靜態(tài)變量在何處分配等。
2.防止內(nèi)存操作越界。
3.必須對(duì)動(dòng)態(tài)申請(qǐng)的內(nèi)存做有效性檢查,并進(jìn)行初始化;動(dòng)態(tài)內(nèi)存的釋放必須和分配成對(duì)以防止內(nèi)存泄漏,釋放后內(nèi)存指針置為NULL。
4.變量在使用前應(yīng)初始化,防止未經(jīng)初始化的變量被引用。5.指針類型變量必須初始化為NULL。6.指針不要進(jìn)行復(fù)雜的邏輯或算術(shù)操作。
7.如果指針類型明確不會(huì)改變,應(yīng)該強(qiáng)制為const類型的指針,以加強(qiáng)編譯器的檢查。8.減少指針和數(shù)據(jù)類型的強(qiáng)制類型轉(zhuǎn)化。9.移位操作一定要確定類型。
10.對(duì)變量進(jìn)行賦值時(shí),必須對(duì)其值進(jìn)行合法性檢查,防止越界等現(xiàn)象發(fā)生。11.類中的屬性應(yīng)聲明為private,用公有的函數(shù)訪問(wèn)。
12.在編寫(xiě)派生類的賦值函數(shù)時(shí),注意不要忘記對(duì)基類的成員變量重新賦值。13.構(gòu)造函數(shù)應(yīng)完成簡(jiǎn)單有效的功能,不應(yīng)完成復(fù)雜的運(yùn)算和大量的內(nèi)存管理。14.不要在棧中分配類的實(shí)例,也不要生成全局類實(shí)例。
15.正確處理拷貝構(gòu)造函數(shù)與賦值函數(shù)。
16.過(guò)程/函數(shù)中申請(qǐng)的(為打開(kāi)文件而使用的)文件句柄,在過(guò)程/函數(shù)退出之前要關(guān)閉,除非要把這個(gè)句柄傳遞給其它函數(shù)使用。
九、可測(cè)試性
1.在同一項(xiàng)目組或產(chǎn)品組內(nèi),為準(zhǔn)備集成測(cè)試和系統(tǒng)聯(lián)調(diào),要有一套統(tǒng)一的調(diào)測(cè)開(kāi)關(guān)及相應(yīng)信息輸出函數(shù),并且要有詳細(xì)的說(shuō)明。統(tǒng)一的調(diào)試接口和輸出函數(shù)由模塊設(shè)計(jì)和測(cè)試人員根據(jù)項(xiàng)目特性統(tǒng)一制訂,由項(xiàng)目系統(tǒng)人員統(tǒng)一納入系統(tǒng)設(shè)計(jì)中。
2.在同一個(gè)項(xiàng)目組或產(chǎn)品組內(nèi),調(diào)測(cè)打印出的信息串要有統(tǒng)一的格式。信息串中應(yīng)當(dāng)包含所在的模塊名(或源文件名)及行號(hào)等信息。
3.在編寫(xiě)代碼之前,應(yīng)預(yù)先設(shè)計(jì)好程序調(diào)試與測(cè)試的方法和手段,并設(shè)計(jì)好各種調(diào)測(cè)開(kāi)關(guān)及相應(yīng)測(cè)試代碼(如打印函數(shù)等)。
十、斷言與錯(cuò)誤處理
1.整個(gè)軟件系統(tǒng)應(yīng)該采用統(tǒng)一的斷言。如果系統(tǒng)不提供斷言,則應(yīng)該自己構(gòu)造一個(gè)統(tǒng)一的斷言供編程時(shí)使用。
2.使用斷言捕捉不應(yīng)該發(fā)生的非法情況。不要混淆非法情況與錯(cuò)誤情況之間的區(qū)別,后者是必然存在的并且是一定要作出處理的。
3.指向指針的指針及更多級(jí)的指針必須逐級(jí)檢查。4.對(duì)較復(fù)雜的斷言加上明確的注釋。
5.用斷言保證沒(méi)有定義的特性或功能不被使用。
6.用調(diào)測(cè)開(kāi)關(guān)來(lái)切換軟件的DEBUG版和RELEASE版,而不要同時(shí)存在RELEASE版本和DEBUG版本的不同源文件,以減少維護(hù)的難度。
7.正式軟件產(chǎn)品中應(yīng)把斷言及其它調(diào)測(cè)代碼去掉(即把有關(guān)的調(diào)測(cè)開(kāi)關(guān)關(guān)掉)。8.在軟件系統(tǒng)中設(shè)置與取消有關(guān)測(cè)試手段,不能對(duì)軟件實(shí)現(xiàn)的功能等產(chǎn)生影響。9.用斷言來(lái)檢查程序正常運(yùn)行時(shí)不應(yīng)發(fā)生但在調(diào)測(cè)時(shí)有可能發(fā)生的非法情況。