| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> c/c++ >> C/C++編程新手錯誤語錄
 

C/C++編程新手錯誤語錄

2008-06-01 02:04:59  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  1.引言

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  還記得當年學數學、英語都有個竅門,那就是搞個錯題集。經常複習一下這個錯題集,就可以避免下次犯同樣的錯誤。而幾乎所有的程序員都是從犯錯誤開始的,我們也很有必要總結一下編程新手的常見錯誤,本文的目的在于此。文中所列出的都是筆者在項目開發中接觸到的新手真實的言談,筆者學學文革腔調,姑且稱之爲「錯誤語錄」。

  2.語錄

  (1)「我的程序都是對的,可結果不對」

  想想你的四周,是不是也有人說這樣的話?假如你也曾經說過,那就此打住,不要再說這句話,因爲這句話只會顯示說話者的無知。既然程序都是對的,那爲什麽結果不對?

  (2)「程序=算法+數據結構」

  假如剛剛學完C語言,我們說這樣的話,完全可以理解,而且可以說是正確的。但是假如你是一位即將從事C/C++編程的程序員,那麽很遺憾,這個說法只能判錯,殊不知,世界上還有另一種說法:

  程序 = 對象+ 消息

  「程序=算法+數據結構」只對面向過程的語言(C)成立,而對面向對象的語言(C++),則只能表述爲「程序=對象+消息」。傳統的過程式編程語言以過程爲中心以算法爲驅動,面向對象的編程語言則以對象爲中心以消息爲驅動。這裏的消息是廣義的,對象A調用了對象B的成員函數,可看作對象A給B發消息。

  (3)「程序編出來,運行正確就行了」

  運行正確的程序並不一定是好程序,程序員時刻要牢記的一條就是自己寫的程序不僅是給自己看的,要讓別人也能輕易地看懂。很遺憾,許多的編程新手不能清楚地駕馭軟件的結構,對頭文件和實現文件的概念含糊不清,寫出來的程序可讀性很差。

  C程序采用模塊化的編程思想,需合理地將一個很大的軟件劃分爲一系列功能獨立的部分合作完成系統的需求,在模塊的劃分上主要依據功能。模塊由頭文件和實現文件組成,對頭文件和實現文件的正確使用方法是:

  規則1頭文件(.h)中是對于該模塊接口的聲明,接口包括該模塊提供給其它模塊調用的外部函數及外部全局變量,對這些變量和函數都需在.h中文件中冠以extern要害字聲明;

  規則2 模塊內的函數和全局變量需在.c文件開頭冠以static要害字聲明;

  規則3 永遠不要在.h文件中定義變量;

  許多程序員對定義變量和聲明變量混淆不清,定義變量和聲明變量的區別在于定義會産生內存分配的操作,是彙編階段的概念;而聲明則只是告訴包含該聲明的模塊在連接階段從其它模塊尋找外部函數和變量。如:

  /*模塊1頭文件:module1.h*/

  int a = 5; /* 在模塊1的.h文件中定義int a */

  /*模塊1實現文件:module1 .c*/

  #include 「module1.h」 /* 在模塊1中包含模塊1的.h文件 */

  /*模塊2實現文件: module2.c*/

  #include 「module1.h」 /* 在模塊2中包含模塊1的.h文件 */

  /*模塊2 實現文件:module3 .c*/

  #include 「module1.h」 /* 在模塊3中包含模塊1的.h文件 */

  以上程序的結果是在模塊1、2、3中都定義了整型變量a,a在不同的模塊中對應不同的地址單元,這明顯不符合編寫者的本意。正確的做法是:

  /*模塊1頭文件:module1.h*/

  extern int a; /* 在模塊1的.h文件中聲明int a */

  /*模塊1實現文件:module1 .c*/

  #include 「module1.h」 /* 在模塊1中包含模塊1的.h文件 */

  int a = 5; /* 在模塊1的.c文件中定義int a */

  /*模塊2 實現文件: module2 .c*/

  #include 「module1.h」 /* 在模塊2中包含模塊1的.h文件 */

  /*模塊3 實現文件: module3 .c*/

  #include 「module1.h」 /* 在模塊3中包含模塊1的.h文件 */

  這樣假如模塊1、2、3操作a的話,對應的是同一片內存單元。

  

C/C++編程新手錯誤語錄
更多內容請看C/C++技術專題 java編程開發手冊專題,或

  規則4 假如要用其它模塊定義的變量和函數,直接包含其頭文件即可。

  許多程序員喜歡這樣做,當他們要訪問其它模塊定義的變量時,他們在本模塊文件開頭添加這樣的語句:

  extern int externVar;

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

   抛棄這種做法吧,只要頭文件按規則1完成,某模塊要訪問其它模塊中定義的全局變量時,只要包含該模塊的頭文件即可。

  (4)「數組名就是指針」

  許多程序員對數組名和指針的區別不甚明了,他們認爲數組名就是指針,而實際上數組名和指針有很大區別,在使用時要進行正確區分,其區分規則如下:

  規則1數組名指代一種數據結構,這種數據結構就是數組;

  例如:

  char str[10];

  char *pStr = str;

  cout << sizeof(str) << endl;

  cout << sizeof(pStr) << endl;

  輸出結果爲:

  10

  4

  這說明數組名str指代數據結構char[10]。

  規則2數組名可以轉換爲指向其指代實體的指針,而且是一個指針常量,不能作自增、自減等操作,不能被修改;

  char str[10];

  char *pStr = str;

  str++; //編譯出錯,提示str不是左值

  pStr++; //編譯正確

  規則3指向數組的指針則是另外一種變量類型(在WIN32平台下,長度爲4),僅僅意味著數組的存放地址;

  規則4數組名作爲函數形參時,在函數體內,其失去了本身的內涵,僅僅只是一個指針;很遺憾,在失去其內涵的同時,它還失去了其常量特性,可以作自增、自減等操作,可以被修改。

  例如:

  void arrayTest(char str[])

  {

  cout << sizeof(str) << endl;//輸出指針長度

  str++; //編譯正確

  }

  int main(int argc, char* argv[])

  {

  char str1[10] = "I Love U";

  arrayTest(str1);

  return 0;

  }

  (5)「整形變量爲32位」

  整形變量是不是32位這個問題不僅與具體的CPU架構有關,而且與編譯器有關。在嵌入式系統的編程中,一般整數的位數等于CPU字長,常用的嵌入式CPU芯片的字長爲8、16、32,因而整形變量的長度可能是8、16、32。在未來64位平台下,整形變量的長度可達到64位。

  長整形變量的長度一般爲CPU字長的2倍。

  在數據結構的設計中,優秀的程序員並不會這樣定義數據結構(假設爲WIN32平台):

  typedef strUCt tagTypeExample

  {

  unsigned short x;

  unsigned int y;

  }TypeExample;

  他們這樣定義:

  #define unsigned short UINT16 //16位無符號整數

  #define unsigned int UINT32 //32位無符號整數

  typedef struct tagTypeExample

  {

  UINT16 x;

  UINT32 y;

  }TypeExample;

C/C++編程新手錯誤語錄
更多內容請看C/C++技術專題 Java編程開發手冊專題,或

  這樣定義的數據結構非常具有通用性,假如上述32平台上的數據發送到16位平台上接收,在16位平台上僅僅需要修改UINT16、UINT32的定義:

  #define unsigned int UINT16 //16位無符號整數

  #define unsigned long UINT32 //32位無符號整數

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  幾乎所有的優秀軟件設計文檔都是這樣定義數據結構的。

  (6)「switch和if …else…可隨意替換」

  switch語句和一堆if…else…的組合雖然功能上完全一樣,但是給讀者的感受完全不一樣。if…else…的感覺是進行條件判定,對特例進行非凡處理,在邏輯上是「非凡與一般」的關系,而switch給人的感覺是多個條件的關系是並列的,事物之間不存在非凡與一般的關系,完全「對等」。

  譬如:

  //分別對1-10的數字進行不同的處理,用switch

  switch(num)

  {

  case 1:

  …

  case 2:

  …

  }

  //對1-10之間的數字進行非凡處理,用if

  if(num < 10 && num > 1)

  {

  …

  }

  else

  {

  …

  }

  許多時候,雖然不同的代碼可實現完全相同的功能,但是給讀者的感覺是完全不同的。譬如無條件循環:

  while(1)

  {

  }

  有的程序員這樣寫:

  for(;;)

  {

  }

  這個語法沒有確切表達代碼的含義,我們從for(;;)看不出什麽,只有弄明白for(;;)在C/C++語言中意味著無條件循環才明白其意。而不懂C/C++語言的讀者看到while(1)也可猜到這是一個無條件循環。

  (7)「免得麻煩,把類裏面的成員函數都搞成public算了」

  

   許多人編C++程序的時候,都碰到這樣的情況,先前把某個成員函數定義成類的PRivate/protected函數,後來發現又要從外面調用這個函數,就輕易地將成員函數改爲public類型的。甚至許多程序員爲了避免訪問的麻煩,幹脆把自己添加的成員函數和成員變量都定義成public類型。

  殊不知,這是一種規劃的失敗。在類的設計階段,我們就要很清楚地知道,這個類的成員函數中哪些是這個類的接口,哪些屬于這個類內部的成員函數和變量。一般的准則是接口(public成員)應在滿足需求的前提下盡可能簡單!

  所以不要輕易地將private/protected成員改爲public成員,真正的工作應該在規劃階段完成。

  3.結束語

  所有的程序員都要經曆一個從糊塗到清楚的過程,文中的錯誤假如你也犯了,切勿自慚。更多的錯誤語錄,希望能在後續文章中陸續推出。

C/C++編程新手錯誤語錄
更多內容請看C/C++技術專題 Java編程開發手冊專題,或
 
 
 
上一篇《C語言中可變參數的用法》
下一篇《C++中extern “C”含義深層探索》
 
 
 
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

河南夫妻在溫嶺網絡直播“造人”內容涉黃被刑事拘留

夫妻網絡直播“造人”爆紅   1月9日,溫嶺城北派出所接到南京警方的協查通告,他們近期打掉了一個涉黃直播APP平台。而根據掌握的線索,其中有一對涉案的夫妻主播...

如何防止牆紙老化?牆紙變舊變黃怎麽辦?

如何防止牆紙老化? (1)選擇透氣性好的牆紙 市場上牆紙的材質分無紡布的、木纖維的、PVC的、玻璃纖維基材的、布面的等,相對而言,PVC材質的牆紙最不透氣...

鮮肌之謎非日本生産VS鮮肌之謎假日貨是謠言

觀點一:破日本銷售量的“鮮肌之謎” 非日本生産 近一段時間,淘寶上架了一款名爲“鮮肌之謎的” 鲑魚卵巢美容液,號稱是最近日本的一款推出的全新護膚品,産品本身所...

中國最美古詩詞精選摘抄

系腰裙(北宋詞人 張先) 惜霜蟾照夜雲天,朦胧影、畫勾闌。人情縱似長情月,算一年年。又能得、幾番圓。 欲寄西江題葉字,流不到、五亭前。東池始有荷新綠,尚小如...

關于女人的經典語句

關于女人的經典語句1、【做一個獨立的女人】 思想獨立:有主見、有自己的人生觀、價值觀。有上進心,永遠不放棄自己的理想,做一份自己喜愛的事業,擁有快樂和成就...

未來我們可以和性愛機器人結婚嗎?

你想體驗機器人性愛嗎?你想和性愛機器人結婚嗎?如果你想,機器人有拒絕你的權利嗎? 近日,第二屆“國際人類-機器人性愛研討會”大會在倫敦金史密斯大學落下帷幕。而...

全球最變態的十個地方

10.土耳其地下洞穴城市 變態指數:★★☆☆☆ 這是土耳其卡帕多西亞的一個著名景點,傳說是當年基督教徒們爲了躲避戰爭而在此修建。裏面曾住著20000人,...

科學家稱,人類死亡後意識將在另外一個宇宙中繼續存活

據英國《每日快報》報道,一位科學家兼理論家Robert Lanza博士宣稱,世界上並不存在人類死亡,死亡的只是身體。他認爲我們的意識借助我們體內的能量生存,而且...

《屏裏狐》片頭曲《我愛狐狸精》歌詞是什麽?

《我愛狐狸精》 - 劉馨棋   (電視劇《屏裏狐》主題曲)   作詞:金十三&李旦   作曲:劉嘉   狐狸精 狐狸仙   千年修...

 
 
 
     1.引言   還記得當年學數學、英語都有個竅門,那就是搞個錯題集。經常複習一下這個錯題集,就可以避免下次犯同樣的錯誤。而幾乎所有的程序員都是從犯錯誤開始的,我們也很有必要總結一下編程新手的常見錯誤,本文的目的在于此。文中所列出的都是筆者在項目開發中接觸到的新手真實的言談,筆者學學文革腔調,姑且稱之爲「錯誤語錄」。 2.語錄 (1)「我的程序都是對的,可結果不對」   想想你的四周,是不是也有人說這樣的話?假如你也曾經說過,那就此打住,不要再說這句話,因爲這句話只會顯示說話者的無知。既然程序都是對的,那爲什麽結果不對? (2)「程序=算法+數據結構」   假如剛剛學完C語言,我們說這樣的話,完全可以理解,而且可以說是正確的。但是假如你是一位即將從事C/C++編程的程序員,那麽很遺憾,這個說法只能判錯,殊不知,世界上還有另一種說法:   程序 = 對象 + 消息  「程序=算法+數據結構」只對面向過程的語言(C)成立,而對面向對象的語言(C++),則只能表述爲「程序=對象+消息」。傳統的過程式編程語言以過程爲中心以算法爲驅動,面向對象的編程語言則以對象爲中心以消息爲驅動。這裏的消息是廣義的,對象A調用了對象B的成員函數,可看作對象A給B發消息。 (3)「程序編出來,運行正確就行了」   運行正確的程序並不一定是好程序,程序員時刻要牢記的一條就是自己寫的程序不僅是給自己看的,要讓別人也能輕易地看懂。很遺憾,許多的編程新手不能清楚地駕馭軟件的結構,對頭文件和實現文件的概念含糊不清,寫出來的程序可讀性很差。   C程序采用模塊化的編程思想,需合理地將一個很大的軟件劃分爲一系列功能獨立的部分合作完成系統的需求,在模塊的劃分上主要依據功能。模塊由頭文件和實現文件組成,對頭文件和實現文件的正確使用方法是:   規則1 頭文件(.h)中是對于該模塊接口的聲明,接口包括該模塊提供給其它模塊調用的外部函數及外部全局變量,對這些變量和函數都需在.h中文件中冠以extern要害字聲明;   規則2 模塊內的函數和全局變量需在.c文件開頭冠以static要害字聲明;   規則3 永遠不要在.h文件中定義變量;   許多程序員對定義變量和聲明變量混淆不清,定義變量和聲明變量的區別在于定義會産生內存分配的操作,是彙編階段的概念;而聲明則只是告訴包含該聲明的模塊在連接階段從其它模塊尋找外部函數和變量。如: /*模塊1頭文件:module1.h*/ int a = 5; /* 在模塊1的.h文件中定義int a */ /*模塊1實現文件:module1 .c*/ #include 「module1.h」 /* 在模塊1中包含模塊1的.h文件 */ /*模塊2實現文件: module2.c*/ #include 「module1.h」 /* 在模塊2中包含模塊1的.h文件 */ /*模塊2 實現文件:module3 .c*/ #include 「module1.h」 /* 在模塊3中包含模塊1的.h文件 */ 以上程序的結果是在模塊1、2、3中都定義了整型變量a,a在不同的模塊中對應不同的地址單元,這明顯不符合編寫者的本意。正確的做法是: /*模塊1頭文件:module1.h*/ extern int a; /* 在模塊1的.h文件中聲明int a */ /*模塊1實現文件:module1 .c*/ #include 「module1.h」 /* 在模塊1中包含模塊1的.h文件 */ int a = 5; /* 在模塊1的.c文件中定義int a */ /*模塊2 實現文件: module2 .c*/ #include 「module1.h」 /* 在模塊2中包含模塊1的.h文件 */ /*模塊3 實現文件: module3 .c*/ #include 「module1.h」   /* 在模塊3中包含模塊1的.h文件 */   這樣假如模塊1、2、3操作a的話,對應的是同一片內存單元。 [url=/bbs/detail_1785330.html][img]http://image.wangchao.net.cn/it/1323423858200.gif[/img][/url] 更多內容請看C/C++技術專題 java編程開發手冊專題,或   規則4 假如要用其它模塊定義的變量和函數,直接包含其頭文件即可。 許多程序員喜歡這樣做,當他們要訪問其它模塊定義的變量時,他們在本模塊文件開頭添加這樣的語句: extern int externVar;    抛棄這種做法吧,只要頭文件按規則1完成,某模塊要訪問其它模塊中定義的全局變量時,只要包含該模塊的頭文件即可。 (4)「數組名就是指針」   許多程序員對數組名和指針的區別不甚明了,他們認爲數組名就是指針,而實際上數組名和指針有很大區別,在使用時要進行正確區分,其區分規則如下:   規則1 數組名指代一種數據結構,這種數據結構就是數組;   例如: char str[10]; char *pStr = str; cout << sizeof(str) << endl; cout << sizeof(pStr) << endl;   輸出結果爲:  10 4   這說明數組名str指代數據結構char[10]。   規則2 數組名可以轉換爲指向其指代實體的指針,而且是一個指針常量,不能作自增、自減等操作,不能被修改; char str[10]; char *pStr = str; str++; //編譯出錯,提示str不是左值  pStr++; //編譯正確   規則3 指向數組的指針則是另外一種變量類型(在WIN32平台下,長度爲4),僅僅意味著數組的存放地址;   規則4 數組名作爲函數形參時,在函數體內,其失去了本身的內涵,僅僅只是一個指針;很遺憾,在失去其內涵的同時,它還失去了其常量特性,可以作自增、自減等操作,可以被修改。 例如: void arrayTest(char str[]) { cout << sizeof(str) << endl;   //輸出指針長度     str++; //編譯正確 } int main(int argc, char* argv[]) {  char str1[10] = "I Love U";  arrayTest(str1); return 0; } (5)「整形變量爲32位」   整形變量是不是32位這個問題不僅與具體的CPU架構有關,而且與編譯器有關。在嵌入式系統的編程中,一般整數的位數等于CPU字長,常用的嵌入式CPU芯片的字長爲8、16、32,因而整形變量的長度可能是8、16、32。在未來64位平台下,整形變量的長度可達到64位。   長整形變量的長度一般爲CPU字長的2倍。   在數據結構的設計中,優秀的程序員並不會這樣定義數據結構(假設爲WIN32平台): typedef strUCt tagTypeExample { unsigned short x; unsigned int y; }TypeExample; 他們這樣定義: #define unsigned short UINT16 //16位無符號整數 #define unsigned int UINT32 //32位無符號整數 typedef struct tagTypeExample { UINT16 x; UINT32 y; }TypeExample; [url=/bbs/detail_1785330.html][img]http://image.wangchao.net.cn/it/1323423858239.gif[/img][/url] 更多內容請看C/C++技術專題 Java編程開發手冊專題,或   這樣定義的數據結構非常具有通用性,假如上述32平台上的數據發送到16位平台上接收,在16位平台上僅僅需要修改UINT16、UINT32的定義: #define unsigned int UINT16 //16位無符號整數 #define unsigned long UINT32 //32位無符號整數   幾乎所有的優秀軟件設計文檔都是這樣定義數據結構的。 (6)「switch和if …else…可隨意替換」   switch語句和一堆if…else…的組合雖然功能上完全一樣,但是給讀者的感受完全不一樣。if…else…的感覺是進行條件判定,對特例進行非凡處理,在邏輯上是「非凡與一般」的關系,而switch給人的感覺是多個條件的關系是並列的,事物之間不存在非凡與一般的關系,完全「對等」。 譬如: //分別對1-10的數字進行不同的處理,用switch switch(num) { case 1: … case 2: … } //對1-10之間的數字進行非凡處理,用if if(num < 10 && num > 1) { … } else { … }   許多時候,雖然不同的代碼可實現完全相同的功能,但是給讀者的感覺是完全不同的。譬如無條件循環: while(1) { }   有的程序員這樣寫: for(;;) { }   這個語法沒有確切表達代碼的含義,我們從for(;;)看不出什麽,只有弄明白for(;;)在C/C++語言中意味著無條件循環才明白其意。而不懂C/C++語言的讀者看到while(1)也可猜到這是一個無條件循環。 (7)「免得麻煩,把類裏面的成員函數都搞成public算了」   許多人編C++程序的時候,都碰到這樣的情況,先前把某個成員函數定義成類的PRivate/protected函數,後來發現又要從外面調用這個函數,就輕易地將成員函數改爲public類型的。甚至許多程序員爲了避免訪問的麻煩,幹脆把自己添加的成員函數和成員變量都定義成public類型。   殊不知,這是一種規劃的失敗。在類的設計階段,我們就要很清楚地知道,這個類的成員函數中哪些是這個類的接口,哪些屬于這個類內部的成員函數和變量。一般的准則是接口(public成員)應在滿足需求的前提下盡可能簡單!   所以不要輕易地將private/protected成員改爲public成員,真正的工作應該在規劃階段完成。 3.結束語   所有的程序員都要經曆一個從糊塗到清楚的過程,文中的錯誤假如你也犯了,切勿自慚。  更多的錯誤語錄,希望能在後續文章中陸續推出。 [url=/bbs/detail_1785330.html][img]http://image.wangchao.net.cn/it/1323423858253.gif[/img][/url] 更多內容請看C/C++技術專題 Java編程開發手冊專題,或
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
陽光靓麗的模特兒(8)
陽光靓麗的模特兒(7)
陽光靓麗的模特兒(6)
陽光靓麗的模特兒(5)
秋-印象
德慶盤龍峽 一
松江印象之三
雲之南(寬幅)
 
>>返回首頁<<
 
 
 
 熱帖排行
 
 
 
 
© 2005- 王朝網路 版權所有