近期玩VC心得

目前在日本項目組,用正體寫注釋(簡體經常出現無法顯示的情況),再由PL翻譯成日文.因此就懶得切換了(本文在溜號時間斷斷續續做成).看不懂的可以提問,但是俺不保證會回答.

干鳥快兩年的QA,對于質量保證沒學會多少,卻沾上了不少嘴高手低,橫挑鼻子豎挑眼滴毛病.這回換組真正碼的時候,才發現遇到好多雞零狗碎的問題.簡單記錄一下,怕忘.再說,中年妇女心得,我便心不得?

1) LINK2001失敗
可能原因:
α,類聲明時,頭文件裏的函數的參數類型定義與實現時的不符(某些時候不會報錯,但是會導致聲明該類的時候鏈接錯誤)
β,類不是MFC擴展類(AFX_EXT_CLASS)
γ,大小寫問題導致.其實與第一個是同一回事,比如在類裏聲明的是GetValue(),而在別處想以Getvalue調用,編譯不會出錯,但是在鏈接的時候會出錯.
δ,靜態變量未聲明
ε,目標/lib或/dll路徑只讀
ζ,Debug版試圖引用Release版lib,或者Release版試圖引用Debug版lib時
η,使用unicode卻沒有在unicode選項下編譯
θ,使用靜態庫卻沒有把庫加入工程

2) 調試時候的內存錯誤
α,聲明的指針沒有初始化,是最好找的問題
β,資源重復釋放(重復刪除句柄),也是很好找的問題
γ,數組下標越界
δ,引用空指針/野指針
ε,錯誤的函數調用,比如誤把itoa()的返回值當成字符串
ζ,錯誤的返回值.比如返回值類型string的函數,返回false也能夠編譯通過,但是別人在使用這個函數時會立刻報內存錯誤
η,類中有錯誤,只要引用了頭文件,即時沒有調用類裏的任何方法,也可能會導致內存錯誤.之前一次連入口都進不去,就是因為引用的類裏有錯誤ε
θ,alloc/free;new/delete的配對.俺們的客戶經常犯這種錯誤
ι,&和*的濫用,比較難找的一種問題

3) 注意大小寫.某些情況編譯不報錯,查找時相當的惡心
4) 注意生存周期.在不考慮速度和效率的情況下,用new的可以更好的控制你寫的東東的生存周期.當然要注意delete
5) 注意日文和某些字符,刪除的時候可能會刪一半,這樣就可能會出現無法通過編譯的字符
6) 有些東東能不往工程裏加就不要往工程裏加,能在頭文件和源文件裏寫出來就寫在那裏.不然改的時候不好改,別人想看得時候也找不到
7) 編碼規范說注釋很重要,但是明確的英文更重要.如果能夠在函數名和成員名裏都說清楚了,基本上不需要那么多的注釋,如果給自己看的話.要不不常用API函數名字怎么一個賽一個的長呢?
8) 協同工作的時候,要注意把工程文件一起checkout出去.雖然它可能直到交付都不會變
9) 引用的頭文件的位置很重要,有的時候編譯不過,試著改改stdafx.h裏頭文件的排列順序
10) 變量聲明的時候順手賦個初值. = 0; =””并不難寫,卻可以省不少麻煩
11) 記得要存檔,記得要存檔,記得要存檔!你用的不管是不是正版VC6,它愛自己死掉卻是不爭的實事.有的時候還會莫名其妙的丟文件.所以一定要適時存
12) VC6死掉的時候,要動用taskmanager殺進程.而且要在application裏殺,而不是process裏,不然再启动以后也木有办法編譯鳥
13) 調試滴時候,F10是單步,F11是進入,F5是跳到下一個斷點.前提是你編譯的是Debug版本.

你好,新朋友。留言前请先填写昵称邮箱