3、程式注釋

.不要以為注釋好寫,有一些演算法是很難說或寫出來的,只能意會,我承認有這種情況的時候,但你也要寫出來,正好可以訓練一下自己的表達能力。而表達能力正是那種悶頭搞技術的技術人員最缺的,你有再高的技術,如果你表達能力不行,你的技術將不能得到充分的發揮。因為,這是一個團隊的時代。/*************************************************************************                                        

從當前的瀏覽器取得當前URL

    確定在uses子句中增加DDEMan。uses windows, ddeman, ......function Get_URL(Servicio: string): String;var   Cliente_DDE: TDDEClientConv;   temp:PChar; file://<<----------------這是新的begin    Result := '';    Cliente_DDE:= TDDEClientConv.Create( nil );   

7、標頭檔中的#ifndef

——————————千萬不要忽略了頭件的中的#ifndef,這是一個很關鍵的東西。比如你有兩個C檔案,這兩個C檔案都include了同一個標頭檔。而編譯時間,這兩個C檔案要一同編譯成一個可運行檔案,於是問題來了,大量的聲明衝突。還是把標頭檔的內容都放在#ifndef和#endif中吧。不管你的標頭檔會不會被多個檔案引用,你都要加上這個。一般格式是這樣的:    #ifndef  <標識>    #define <標識>        ......    ......   

一個很不錯的首頁效果。。你試試!!!

原始碼如下:<HTML><HEAD><TITLE>示範</TITLE><META http-equiv=Content-Type content="text/html; charset=gb2312"></HEAD><BODY bgColor=#ffffff><p><OBJECT id=yancey style="LEFT: 0px; TOP: 0px"

6、if 語句對出錯的處理

我看見你說了,這有什麼好說的。還是先看一段程式碼吧。    if ( ch >= '0' && ch <= '9' ){        /* 正常處理代碼 */    }else{        /* 輸出錯誤資訊 */        printf("error ....../n");        return ( FALSE );    }這種結構很不好,特別是如果“正常處理代碼”很長時,對於這種情況,最好不要用else。先判斷錯誤,如:    if ( ch &

8、在堆上分配記憶體

—————————可能許多人對記憶體配置上的“棧 stack”和“堆

9、變數的初始化

————————接上一條,變數一定要被初始化再使用。C/C++編譯器在這個方面不會像JAVA一樣幫你初始化,這一切都需要你自己來,如果你使用了沒有初始化的變數,結果未知。好的程式員從來都會在使用變數前初始設定變數的。如:    1) 對malloc分配的記憶體進行memset清零操作。(可以使用calloc分配一塊全零的記憶體)    2) 對一些棧上分配的struct或數組進行初始化。(最好也是清零)   

11、出錯資訊的處理

—————————你會處理出錯資訊嗎?哦,它並不是簡單的輸出。看下面的樣本:    if ( p == NULL ){        printf ( "ERR: The pointer is NULL/n" );    }    告別學生時代的編程吧。這種編程很不利於維護和管理,出錯資訊或是提示資訊,應該統一處理,而不是像上面這樣,寫成一個“寫入程式碼”。第10條對這方面的處理做了一部分說明。如果要管理錯誤資訊,那就要有以下的處理:    /* 聲明出錯代碼 */    #define    

16、把相同或近乎相同的代碼形成函數和宏

—————————————————————有人說,最好的程式員,就是最喜歡“偷懶”的程式,其中不無道理。如果你有一些程式的程式碼片段很相似,或直接就是一樣的,請把他們放在一個函數中。而如果這段代碼不多,而且會被經常使用,你還想避免函數調用的開銷,那麼就把他寫成宏吧。千萬不要讓同一份代碼或是功能相似的代碼在多個地方存在,不然如果功能一變,你就要修改好幾處地方,這種會給維護帶來巨大的麻煩,所以,做到“一改百改”,還是要形成函數或是宏。

12、常用函數和迴圈語句中的被計算量

—————————————————看一下下面這個例子:    for( i=0; i<1000; i++ ){        GetLocalHostName( hostname );        ...    }   

17、運算式中的括弧

如果一個比較複雜的運算式中,你並不是很清楚各個操作符的憂先級,即使是你很清楚優先順序,也請加上括弧,不然,別人或是自己下一次讀程式時,一不小心就看走眼理解錯了,為了避免這種“誤解”,還有讓自己的程式更為清淅,還是加上括弧吧。比如,對一個結構的成員取地址:    GetUserAge( &( UserInfo->age )

13、函數名和變數名的命名

————————————我看到許多程式對變數名和函數名的取名很草率,特別是變數名,什麼a,b,c,aa,bb,cc,還有什麼flag1,flag2, cnt1, cnt2,這同樣是一種沒有“修養”的行為。即便加上好的注釋。好的變數名或是函數名,我認為應該有以下的規則:        1) 直觀並且可以拼讀,可望文知意,不必“解碼”。     2) 名字的長度應該即要最短的長度,也要能最大限度的表達其含義。    3)

18、函數參數中的const

———————————對於一些函數中的指標參數,如果在函數中唯讀,請將其用const修飾,這樣,別人一讀到你的函數介面時,就會知道你的意圖是這個參數是[in],如果沒有const時,參數表示[in/out],注意函數介面中的const使用,利於程式的維護和避免犯一些錯誤。雖然,const修飾的指標,如:const char*

14、函數的傳值和傳指標

————————————向函數傳參數時,一般而言,傳入非const的指標時,就表示,在函數中要修改這個指標把指記憶體中的資料。如果是傳值,那麼無論在函數內部怎麼修改這個值,也影響不到傳過來的值,因為傳值是只記憶體拷貝。什嗎?你說這個特性你明白了,好吧,讓我們看看下面的這個常式:voidGetVersion(char* pStr){    pStr = malloc(10);    strcpy ( pStr, "2.0" );}main(){    char* ver = NULL;   

19、函數的參數個數(多了請用結構)

—————————————————函數的參數個數最好不要太多,一般來說6個左右就可以了,眾多的函數參數會讓讀代碼的人一眼看上去就很頭昏,而且也不利於維護。如果參數眾多,還請使用結構來傳遞參數。這樣做有利於資料的封裝和程式的簡潔性。也利於使用函數的人,因為如果你的函數個數很多,比如12個,調用者很容易搞錯參數的順序和個數,而使用結構struct來傳遞參數,就可以不管參數的順序。而且,函數很容易被修改,如果需要給函數增加參數,不需要更改函數介面,只需更改結構體和函數內部處理,而對於調用函數的程式來說

15、修改別人程式的修養

———————————當你維護別人的程式時,請不要非常主觀臆斷的把已有的程式刪除或是修改。我經常看到有的程式員直接在別人的程式上修改運算式或是語句。修改別人的程式時,請不要刪除別人的程式,如果你覺得別人的程式有所不妥,請注釋掉,然後添加自己的處理常式,必竟,你不可能100%的知道別人的意圖,所以為了可以恢複,請不依賴於CVS或是SourceSafe這種版本控制軟體,還是要在源碼上給別人看到你修改程式的意圖和步驟。這是程式維護時,一個有修養的程式員所應該做的。如下所示,這就是一種比較好的修改方法:

安全性群組項目品質管理經驗

  在軟體產品的研發過程中,軟體品質一直處於最為核心的地位。軟體企業能否順利發展需要多方面的努力,其中軟體品質保障在其發展過程中佔有非常重要的位置。對於一個軟體項目而言,由於所呈現的大多是腦力勞動成果的形式,很大程度上取決於項目群組成員的集體智慧、編碼水平和群體貢獻。所以從軟體項目的開始到結束(發布)過程中的動態不確定因素很多,這必然極大地增加了項目品質控制的難度,使得在按時提交軟體產品的前提下有效保障軟體品質成為了一個比較棘手的問題。  不同的項目組對品質保障問題的解決方案肯定不盡相同,下面我

20、函數的傳回型別,不要省略

——————————————我看到很多程式寫函數時,在函數的傳回型別方面不太注意。如果一個函數沒有傳回值,也請在函數前面加上void的修飾。而有的程式員偷懶,在返回int的函數則什麼不修飾(因為如果不修飾,則預設返回int),這種習慣很不好,還是為了原代碼的易讀性,加上int吧。所以函數的傳回值類型,請不要省略。另外,對於void的函數,我們往往會忘了return,由於某些C/C++的編譯器比較敏感,會報一些警告,所以即使是void的函數,我們在內部最好也要加上return的語句,這有助於代碼的

21、goto語句的使用

—————————N年前,軟體開發的一代宗師——迪傑斯特拉(Dijkstra)說過:“goto statment is harmful !!”,並建議取消goto語句。因為goto語句不利於程式碼的維護性。這裡我也強烈建議不要使用goto語句,除非下面的這種情況:    #define FREE(p) if(p) { /                        free(p); /                        p = NULL; /                   

22、宏的使用

——————很多程式員不知道C中的“宏”到底是什麼意思?特別是當宏有參數的時候,經常把宏和函數混淆。我想在這裡我還是先講講“宏”,宏只是一種定義,他定義了一個語句塊,當程式編譯時間,編譯器首先要執行一個“替換”來源程式的動作,把宏引用的地方替換成宏定義的語句塊,就像文字檔替換一樣。這個動作術語叫“宏的展開”使用宏是比較“危險”的,因為你不知道宏展開後會是什麼一個樣子。例如下面這個宏:    #define  MAX(a, b)     a>b?a:b當我們這樣使用宏時,沒有什麼問題:

總頁數: 61357 1 .... 13702 13703 13704 13705 13706 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.