閑著沒事,就把k&r風格和ms風格的大致區(qū)別出來寫一寫,現(xiàn)在列出來:
(1)書寫結(jié)構(gòu):
k&r風格: 縮進一個水平制符,k&r提倡8格.左花括號緊接其后不另起一行(函數(shù)體的左括號除外).
if(...) {
...;
...;
} else if(...) {
...;
...;
} else {
...;
...;
}
while(...) {
...;
...;
}
do {
...;
...;
}while(...);
for(...;...;...) {
...;
...;
}
typedef {
...;
...;
...;
}abc;
class abc {
...;
...;
...;
};
ms vc++風格: 縮進一個水平制符,vc的水平制符相當4個空格.
if(...)
{
...;
...;
}
else if(...)
{
...;
...;
}
else
{
...;
...;
}
while(...)
{
...;
...;
}
do
{
...;
...;
}while(...);
typedef
{
...;
...;
...;
}abc;
class abc
{
...;
...;
...;
};
堅持k&r風格的開發(fā)人員認為將左花括號單獨占一行浪費了行數(shù),使代碼稀疏不夠緊湊.只要右花括跟條件控制關(guān)鍵字if,while,do,for等并列即已很清晰.縮進制表符相當于8個空格,這樣層次清晰,4格不夠清晰.
堅持ms風格的開發(fā)人員認為左花括號緊接其后不另起一行而函數(shù)體的左括號卻另起一行,是一種怪異的不一致性.縮進8格太多,縮進層次多了會使一些代碼跑出屏幕.
(2)命名法
k&r風格: 講究簡短清爽.單詞一致使用小寫;一個單詞超過8個字符的使用縮寫;一個名字中包含多個單詞則用下劃線隔開它們.
BOOL empty;
int num_element;
void get_element();
class stack;
class seq_stack;
struct student;
object obj;
dialog dlg;
int object::cls_id;
int tmp;

int i, j;
ms風格: 講究表意明確.使用匈牙利法給名字加類型前綴;每個單詞第一個字母以大寫開頭;相對前者更容易冗長,也有少部分地方借鑒于k&r風格.
BOOL bIsEmpty;
int dwNumberOfElements;
void GetElement();
class IStack;
class CSequenceStack;
struct SStudentInfo;
CBaseObject cBaseObject;
CBaseDialog cBaseDialog;
int CBaseObject::m_dwClassID;
//也有少部分借鑒于k&r的簡約風格
int tmp;
int i, j;
堅持ms風格的人認為k&r風格的變量,結(jié)構(gòu)和很多標識符出現(xiàn)在一起時,有時人會分不清標識符是函數(shù)內(nèi)的成員還是普通變量,或者不知道變量,結(jié)構(gòu)還是類.
堅持k&r風格的人認為微軟的所謂"表意明確"和匈牙利類型命名法是純粹自找腦損傷的表現(xiàn).好的名字本來就不應(yīng)該讓程序員看不懂是什么類型.又何嘗要加匈牙利類型前綴,并諷刺匈牙利類型前綴是寫給編譯器看的.
(3)總結(jié)
k&r風格,歷史悠久,而且有眾多友好的開源兄弟,如linux內(nèi)核風格,gnu編碼規(guī)范,它們都跟k&r基本相同.如果要寫開源代碼,使用k&r可能會更受人歡迎.不少堅持k&r風格的開發(fā)人員認為k&r風格是老字號,是C語言發(fā)明人提出國際標準化組織制定的風格.因此一些開發(fā)者認為ms風格不夠正統(tǒng).
ms風格是這幾年推向MS外部開發(fā)人員的后起之秀,憑著微軟的軟件巨無霸的實力,迅速風靡開來.隨著Visual C++,MFC在開發(fā)市場推廣和普及,越來越多的開發(fā)人員逐漸接受了ms風格.不少堅持ms風格的開發(fā)人員認為k&r風格已過時,編程規(guī)范應(yīng)該與時俱進.
愛華網(wǎng)



