原則1: 遵守ANSIC和ISO C++國際標準
原則2: 將不符合國際標準的代碼與其他代碼分開
原則3: 運算時顯式轉換有符號和無符號類型
?例子
unsigned long possitionA;
unsigned long possitionB;
//…
long distance=long (possitionA) – long (possitionB);
原則4: 恰當使用位操作符
?說明
只有絕對需要時,才使用位操作符,比如操作硬件寄存器時。
原則5:不要強制引用/指針指向尺寸不同的目標
?例子
int badFunction (const char* pChar)
{
// 危險
int*PInt= (const int*)pChar;
return (*PInt);
}
原則6: 確保類型轉換不會丟失信息
?例子
// 在大多數環境下,函數fork()的返回值大于short的長度,從而導致信息丟失
short pid=fork();
原則7: 不要假設類型的存儲尺寸
?說明
諸如整型、長整、短整、浮點數、雙精浮點數等的內存尺寸依系統不同而不同:而指向不同類型的指針也不能保證尺寸一定一樣()。
?例子
/ *
* 假設整型的內存尺寸為4個字節,并據此申請內存,一旦
* 運行平臺改變,而新的運行平臺的整型尺寸不同(比如64
* 位平臺應是8個字節而不是4個字節),則需要直接修改代
* 碼,兼容性不好
* /
buffer=new char[4*length];
/ *
* 讓編譯器在編譯時計算(通過sizeof())要靈活得多,因
* 為編譯器在計算時會根據不同平臺的要求給出相應的值
* /
buffer=new char[sizeof(int)*length];
原則8: 不要假設對象(等數據結構)的存儲結構
原則9: 注意運算溢出問題
?例子
short abs (short n)
{
if (n<0)
{
n= -n;
/ *
* 短整型的范圍是-32768到+32767,當n=-32768時,
* -n就溢出了
* /
}
return n;
}
原則10: 不要假設表達式的運算順序
?例子
int x= (
(getchar()<<24) |
(getchar()<<16) |
(getchar()<<8) |
(getchar() )
};
原則11: 不要假設函數參數的計算順序
?例子
int array[]={1,2,3,4};
int* PArray=&array[0];
/ *
* 不同編譯器,執行結果可能不同,有可能是
* function (1,2),也可能是function(2,1)
* /
function (*PArray++,*pArray++);
原則12: 注意數據文件的兼容性
?說明
1) 字節排列順序:
有的系統從右向左組織字節,有的是從左向右:網絡傳輸數據也存在同樣問題:有的系統先傳數據的低字節,有的先傳高字節:(現在有標準函數可以做轉換,請查閱操作系統的相關文檔)。
2) 數據對齊:
為了保證訪問效率,數據存放也采用不同的對齊格式,比如字對齊或雙字對齊等,所以可能會有無用的空隙插在相鄰數據之間,編程者也需留神。
3) 行尾標志:
有的系統用回車做行尾(比如一般的UNIX系統),有的用回車換行兩個字符做行尾(比如Windows系列)。
原則13: 注意引用公共庫的兼容性
?說明
盡量選擇兼容性好(支持多平臺)的庫。一般來說,標準庫要好于系統庫(操作系統提供的)或自定義庫,因為它們是經過精心設計以保證兼容性、高效性等一系列需求的。
原則14: 一定不要重新實現標準庫函數
?例子
// 自己實現memcpy()
void*memcpy (void*pDes,void*pSrc,size_t length)
{
//…
}
原則15: 將所有#include的文件名視為大小寫敏感
原則16: 確保main()函數總是返回一個整型
?例子
int main (int arp,char*argv[])
{
int status=0;
//…
return status; // return appropriate status
}
- 第一章 概述
- 1.1規范制定原則
- 1.2 術語定義
- 1.3 文件命名組織
- 1.3.1文件命名
- 1.3.2文件注釋
- 第二章 編碼風格
- 第三章 注釋
- 3.1 注釋概述
- 3.2 文檔型注釋
- 3.3 類c注釋
- 3.4 單行注釋
- 3.5 注釋標簽
- 第四章 聲明
- 4.1每行聲明數
- 4.2初始化
- 4.3位置
- 4.4類和接口的聲明
- 4.5字段的聲明
- 第五章 命名規范
- 5.1命名概述
- 5.2大小寫規則
- 5.3縮寫
- 5.4命名空間
- 5.5類
- 5.6接口
- 5.7屬性 (Attribute)
- 5.8枚舉 (Enum)
- 5.9參數
- 5.10方法
- 5.11屬性 (property)
- 5.12事件
- 5.13 常量 (const)
- 5.14 字段
- 5.15 靜態字段
- 5.16 集合
- 5.17 措詞
- 第六章 語句
- 6.1每行一個語句
- 6.2 復合語句
- 6.3 return 語句
- 6.4 if、 if-else、if else-if 語句
- 6.5 for、foreach 語句
- 6.6 while 語句
- 6.7 do - while 語句
- 6.8 switch - case 語句
- 6.9 try - catch 語句
- 6.10 using 塊語句
- 6.11 goto 語句
- 第七章 函數與類
- 第八章 內存分配和釋放
- 第九章 兼容性
- 第十章 控件命名規則
- 10.1 命名方法
- 10.2 主要控件名簡寫對照表
- 附錄一: 匈牙利命名法