{C++ 基礎(chǔ)} {C++ 高級} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}
?
在2005年年中的時(shí)候,公司就準(zhǔn)備轉(zhuǎn)移到Visual Studio 2005上開發(fā)產(chǎn)品。本人有幸參與了升級的過程,成功的把30個(gè)左右solutions、幾百個(gè)projects升級到了VC8。由于項(xiàng)目眾多,并且項(xiàng)目還在持續(xù)開發(fā)中,我們的基本策略是讓代碼同時(shí)在VC7.1和VC8下面編譯通過,最后再完全轉(zhuǎn)到VC8,鏈接并運(yùn)行成功。從總體上說VC8比VC7.1語法上嚴(yán)格且嚴(yán)謹(jǐn)。下面是我的一些經(jīng)驗(yàn)總結(jié)。文中只涉及到編譯問題,鏈接的問題沒有包含在內(nèi)。我的同事Mr Han對此文有巨大貢獻(xiàn),在此非常感謝。1.?變量作用域 在vc7.1中, 如果一個(gè)變量定義在for語句的條件從句中,那么這個(gè)變量可以在for之后使用。但Vc8禁止這樣,會報(bào)告一個(gè)C2065錯(cuò)誤.
解決方法:在for語句之前聲明變量(可保證代碼在vc7.1和vc8下同時(shí)編譯通過)
2.?指針和引用的聲明 在Vc7.1中, 下面的代碼可以編譯, 但是vc8會報(bào)C4430 錯(cuò)誤。(很難想象有些美國程序員竟然這樣聲明)
解決方法:把* 或&放到類型的后面.
3.?默認(rèn)int類型 在vc7.1中,如果定義一個(gè)變量但不聲明類型,那么默認(rèn)為int。VC8不支持。
解決方法:加上int.
4.?函數(shù)的默認(rèn)返回值類型 同上,VC8不支持把 int 作為默認(rèn)返回值類
解決方法:明確聲明函數(shù)返回值類型為 int.
5.?函數(shù)地址 Vc7中函數(shù)名就是地址。在vc8中,必須要使用&操作符同時(shí)寫出這個(gè)方法的全名(fully qualified name).
解決方法:加上 &.
6.?隱式類型轉(zhuǎn)換 VC8不允許B* 到const B*&的隱式轉(zhuǎn)換.
解決方法:強(qiáng)制轉(zhuǎn)換或函數(shù)參數(shù)變成const B*。
7.?友元方法(Friend function) VC8不允許聲明一個(gè)private或protected函數(shù)為友元.
解決方法 1:聲明友元類.
解決方法 2:把函數(shù)聲明為public
8.?STL的stdext 命名空間 在vc8中,hash_map 和hash_set 被移進(jìn)了stdext命名空間中.
解決方法:使用stdext 命名空間.
9.?頭文件 許多頭文件如fstream.h 和iostream.h在VC8中已經(jīng)不存在了.
解決方法:使用STL.
10.?Iterator 一些 STL 類, iterators 不再用指針實(shí)現(xiàn)
解決方法:
11.?Enum 使用一個(gè)Enum的成員時(shí),不要使用enum的名字
解決方法:去掉Enum 的名字.
posted on 2006-07-24 08:47 夢在天涯 閱讀(985) 評論(0) 編輯 收藏 引用 所屬分類: CPlusPlus 、VS2005/2008