Vista系統(tǒng)中C++ Builder還這么好使嗎?
C++ Builder可以編譯所有符合ANSI/ISO標(biāo)準(zhǔn)的原代碼,支持最新ANSI C++/C語言特征:模板、例外、運(yùn)行、以及Namespaces等,下面著重說明下在Vista系統(tǒng)中C++ Builder的開發(fā)工作。
注意:當(dāng)然,這里所說的讓位,是指RAD;這里所提的“VS2005及以后的版本在Vista下將只支持C++托管代碼的開發(fā)”來自6月8號在西安參加CodeGear的新品發(fā)布會時范路先生所說。
個人很喜歡C#,一方面類庫強(qiáng)大,另一方面因?yàn)镃#的架構(gòu)師Anders Hejlsberg(我很佩服,呵呵)。不管MS有多少不好,基于MS和Windows的強(qiáng)大,掌握MS陣營的一種或多種工具很是很有必要的(我只是開源和Linux的擁護(hù)者,非常不狂熱),所以我選擇了C#。扯遠(yuǎn)了。
C++ Builder2007支持Vista下的原生代碼開發(fā),也只支持這種方式。但是不要以為原生代碼實(shí)現(xiàn)不了Vista的特殊效果。范路先生說了。這是C++ Builder及以后的版本的定位,也因?yàn)镸S將放棄VC++在Vista下的原生代碼開發(fā),將會給予C++ Builder一條生路(同眼下相比)。
忘了Delphi是什么定位了,可能范路先生沒有說。難道還是雙管齊下?不知道在Vista時代C++ Builder能否重振雄風(fēng):)更有可能的是三國時代(上一次是Borland、MS和賽門鐵克)重現(xiàn)--在原生代碼領(lǐng)域?托管還是原生,每個人的偏愛都不一樣--如果你不喜歡C++的話。#t#
不在此列,哈哈--如果不出意外(喜歡C++ && 原生代碼 && RAD的大有人在;來分C++原生代碼RAD的公司姍姍來遲),MS就把一部分江山拱手相讓了;這樣也好,競爭對手也是一種推動力。C++ Builder生成新的控制臺應(yīng)用程序時會自動加上這條語句。這在你所用的程序中不是必須的,所以代碼清單中將其省略。無論有無這條語句,程序運(yùn)行結(jié)果是一致的。
分析輸出結(jié)果為:x=32767 x=32768如果用int數(shù)據(jù)類型,則不會有這個問題,因?yàn)閕nt數(shù)據(jù)類型的取值范圍在正向20億之間,一般不會有繞回的問題。但這時程序可能會稍大一些,因?yàn)閕nt需要4字節(jié)存儲,而short只需要2字節(jié)存儲。
對于大多數(shù)應(yīng)用程序,這個差別是不顯著的。前面介紹了自動類型換算。有時C++無法進(jìn)行換算,這時可能在編譯器中產(chǎn)生編譯錯誤,說Cannot convert from x to y(無法從x換算到Y(jié))。
編譯器也可能警告說Conversion might lose significant digits(換算可能丟失顯著位)。提示 編譯器警告應(yīng)當(dāng)作編譯器錯誤。因?yàn)樗砻鞒隽隋e誤。我們應(yīng)努力生成無警告的編譯。有時警告無法避免,但一定要認(rèn)真檢查所有警告。應(yīng)充分了解警告的原因并盡量予以糾正。
說明 這里介紹的字串操作是C語言中的字串處理方法。大多數(shù)C++編譯器提供了cstring類,可以簡化字串的處理(C++ Builder的Visual構(gòu)件庫中有個AnsiString類,可以處理字串操作。
C++ Builder聯(lián)機(jī)幫助中詳細(xì)介紹了AnsiString類)。盡管C語言中的字串處理方法比較麻煩,但并不過時,C++編程人員經(jīng)常在使用cstring類和AnsiString類等字串類的同時使用C語言中的字串處理方法。這里不想對表中的每個函數(shù)進(jìn)行舉例說明,只想舉兩個最常用的函數(shù)。strcpy()函數(shù)將一個字串復(fù)制到另一字串中,源字串可以是變量或直接字串。例如下列代碼:
- //set up a string to hold 29 characters
- char buff[30];
- //copy a string literal to the buffer
- strcpy (buff,"This is a test.");//display it
- cout << buff << end;
- //initialize a second string buffer
- char buff2[]="A second string.";
- //copy the contents of this string to the first buffer
- strcpy (buff,buff2);
- cout << buff << end1;