本篇文章主要寫的內容是一些常用資料型別書寫過程中的注意事項:
1.避免使用「神秘數值」:神秘數值是指那些在程式中出現的且沒有解釋過的數值文字量。最好用具名常量來代表這些神秘值
2.預防除零的錯誤
3.使型別強制轉換變得明顯
4.避免混合型別的比較:如整數和浮點數比較,如果程式能夠執行起來也是歪打正著,所以不要這麼使用
5.注意編譯器的警告整數
使用整數時,需要注意一下問題:
1.檢查整數除法:在數學領域中的除法運算10*(7/10)=(10*7)/10=7,但是在程式設計中卻不相等10*(7/10)=0,因為7/10轉換成整數時為0,所以在整數除法過程中要嚴格檢查一下除法運算的順序。
2.檢查整數溢位:在做整數的加法或乘法的時候,要留心可能的最大整數進行運算的問題。
3.檢查中間結果溢位的問題。
浮點數
使用浮點數時主要考慮的是,很多十進位制小數不能夠精確地用數字計算機中的1和0表示。
1.避免數量級相差巨大的數之間的加減運算,如32為浮點數,1 000 000.00 + 0.1 可能會得到1 000 000.00,因為32位不能提供足夠的有效位數包容1 000 000 和0.1之間的數值區間。解決方案就是,從最小數值開始相加。
2.避免等量判斷:很多應該想等等額浮點數值並不一定相等。如10個0.1相加來很少會等於1.0。
3.處理捨入誤差問題:由於捨入誤差導致的錯誤與數字之間數量級相差太大導致的錯誤是一樣的。
4.檢查語言和庫函式對特定資料型別的支援
字元和字元處
1.避免使用神秘字元和神秘字串:神秘字元和神秘字串的概念與神秘數值相似,就是毫無解釋的一些字元和字串,通常應該使用具名常量來代替這些隨意寫出來的神秘字元和字串。
2.避免off-by-one錯誤(出現在字元處的結尾處』\0『):由於字串的下表索引方式幾乎與陣列相同,因此要避免因為讀寫操作超過了字串末尾而導致的off-by-one錯誤。
3.了解語言和開發環境是如何支援unicode的
4.在程式生命週期中盡早解決國際化/本地化策略
5.如果知道只需要支援一種文字的語言,請考慮使用iso8859字符集
6.如果需要支援多種語言,請使用unicode
7.採用某一致的字串型別轉換策略
針對c語言中的字串中的一些問題:
警惕任何包含字串和等號的表示式;通過命名規則區分變數是字元陣列還是字串指標。
2.把c-style字串的長度宣告為constant+1的方式
3.用null初始化字串以避免無結束符的字串,c語言通過查詢空字元來認定字串有沒有結束,因此一定要將其最後一位賦值成空或』\0『
4.用字元陣列取代c中的指標
5.用strncpy()取代strcpy()以避免無結束符的字串
布林變數
1.用布林變數對陳旭加以文件說明
2.用布林變數來簡化複雜的判斷
3.如果需要的話,建立自己的布林型別
列舉型別
1.用列舉型別來提高可讀性:每當看到字面形式數字的時候,就該考慮一下是否把它換成列舉型別是不是更加合理。
2.用列舉型別來提高可靠性
3.用列舉型別來簡化修改:如果分別用1,2,3來表示不同的含義,當需要修改的時候工作量會很大,因此採用列舉的方法來將特定的數值表示稱相應的名稱。
4.將列舉型別作為布林變數的替換方案
5.檢查非法數值:用列舉來標記有哪些是非法的
6.定義出列舉的第一項和最後一項,以便用於迴圈邊界
7.把列舉型別的第乙個元素留作非法值
8.明確定義專案**編寫標準中第乙個和最後乙個元素使用規則,並且在使用時保持一致
9.警惕給列舉元素明確賦值而帶來的失誤
具名常量
具名變數很像變數,一旦賦值以後就不能再修改了,具名常量允許讓你擁有乙個名字而不是數字來表示固定的量。當需要修改時只需要修改一次即可。
1.在資料宣告中使用具名常量
2.統一地使用具名常量:如果需要表示的是同乙個實體,在一處使用具名常量,而在另一處使用數字符號是非常危險的。
3.避免使用文字量,即使是「安全」的
陣列 1.確認所有的陣列下標都沒有超出陣列的邊界
2.考慮用容器來取代陣列,或者將陣列作為順序化結構來處理
3.檢查陣列的邊界
4.如果陣列是多維的,確認下標的使用順序是正確的
5.提防下標串話:即多層迴圈巢狀的時候最容易發生裡面的迴圈引錯了其他的陣列或者下標的情況。
建立自己的型別(型別別名)
這樣的好處與具名常量的好處是一樣的,如吧x、y、z座標系中的座標值轉化為緯度、經度和海拔高度,此時不知道是使用單精度還是雙精度的時候,可以利用typedef來定義乙個名稱如 typedef float coordinate;作為乙個浮點數的代表,當需要修改為雙精度的時候就可以修改一處就可以了。
建立自定義資料型別的指導原則
1.給所建立的型別取功能導向的名字:避免使用那些代表了型別底層計算機資料類的型別名。
2.避免使用預定義型別:如果型別有可能變化,就應避免在除typedef或型別定義以外的任何位置使用預定義的型別。
3.不要重定義乙個預定義的型別
4.定義替代型別以便於移植
5.考慮建立乙個類而不是使用typedef:簡單的typedef對隱藏變數的底層型別資訊室大有幫助的。然而,可能會需要定義類所能獲得的哪些二外的靈活度和控制力。
基本資料型別
列舉 定義列舉型別 enum season 定義兩個列舉變數 enum season mylove yourlove 為兩個列舉變數賦值 yourlove fall mylove winter 把列舉值當成無符號整數執行輸出 nslog fall 的值 u fall 3 nslog winter 的...
基本資料型別
建立資料庫 create database database name 顯示所有資料庫 show databases 選擇使用那個資料庫 use database name 刪除資料庫 drop database database name 檢視自己mysql資料庫支援什麼儲存引擎 show eng...
基本資料型別
整型int 整數,在目前絕大多數機器上佔4個位元組。tc環境中是2個位元組 單精度實型float 單精度浮點數,一般是4個位元組長 雙精度實型double 雙精度浮點數,一般是8個位元組長 字元型char 字元,一般是1個位元組長 用來表示256個ascii字元,或者0 255的整數 列舉型enum...