發表文章

目前顯示的是 7月, 2006的文章

如何精進自己的C/C++功力

<本文轉錄自 ptt.cc BBS 站 C_and_CPP 板 FAQ 作者: Khoguan Phuann> 我是個自學者,努力讀了幾本「精通 C++程式設計」這類的書,但還是寫不出什麼真正有用的程式,怎麼辦? 這些書大概只談到了 C++ 語言本身的結構、語法,加上一些 C++ 標準程式庫的東西,然後示範了幾個不是很有用的小程式。要寫出真正有用的程式,光知道這些還不夠。一方面,還要往下紮根,學習一些資料結構及演算法的知識,探討各種程式設計典範,如:物件導向程式設計、設計模式(design patterns)的理論;一方面還要往廣度擴展,根據想要寫的程式的種類,去學習諸如圖形介面、資料庫、網路通訊、影像處理等的觀念及其程式庫的使用。還有作業系統平台上的系統呼叫,如 Unix/Linux system call、Win32 API等。 另外,也常需要學習一些應用程式框架(application framework)以及快速應用程式開發工具(Rapid Application Development Tool, RAD Tool)。當程式的規模越來越大,軟體工程理論的知識也越形重要。 想一個覺得有趣的專案主題,其所需的程式能力比自己目前的程度高一點,然後邊寫邊學習不足的相關知識,從做中學吧。或者找一套開放源碼的軟體,修改並增加自己想要的功能,回饋給社群,和高手們互動,更是極佳的訓練。

取得 C 或 C++ 標準文件

<本文轉錄自 ptt.cc BBS 站 C_and_CPP 板 FAQ 作者: Khoguan Phuann> 如何取得 C 或 C++ 標準規格的正式文件? C90 只有印刷的紙本,蠻貴的,且要寫信去國外買。詳情見 http://www.eskimo.com/~scs/C-faq/q11.2.html C99 有 PDF檔,可至 http://webstore.ansi.org/ 用信用卡線上購買並下載。定價 $18 美元。C++03 亦同。 C89 及 C99 另外附了一份參考用的 Rationale 文件,算是對標準的詮釋。 C89 Rationale 在 http://www.lysator.liu.se/c/rat/title.html C99 Rationale 在 http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf C++03 並無 Rationale,因為 C++ 遠比 C 複雜,標準委員會並無相應的人物力去另行編撰 C++ 的 Rationale。 正式標準的文件,內容相當繁細,文辭非常拗口,雖有不少片段程式例子,但整體內容仍然非常抽象。要掌握一個完整的觀念,必須自行從許多不同的章節段落爬梳綜合。已經相當熟悉 C/C++ 的人才比較能讀得動。

C89, C90, C99是什麼?

<本文轉錄自 ptt.cc BBS 站 C_and_CPP 板 FAQ 作者:Khoguan Phuann> Q: 有時會看到人家提到 C89, C90, C99, C++98, 或 C++03, 那是啥? A: 是俗稱 C 或 C++ 的標準的版本,數字指的是年代。 C89 是 ANSI(美國國家標準局)定的,通過於 1989 年底,出版於 1990 年春,正式編號是 ANS X3.159-1989。C89也就是所謂的 ANSI C。 C90 是 ISO(國際標準組織)承襲自 ANSI 的 C89 而定的國際標準,美國也跟著採用了。C90 的核心內容和 C89 一樣。C90 的正式編號是ISO/IEC 9899:1990。 C99 是 ISO 在經過十年後正式推出的 C 標準的第二版(其間有持續的對 C進行小幅的修訂),正式編號是 ISO/IEC 9899:1999。C99 新增了一些連 C++也沒有的新特性(features),像是變動長度的陣列。目前大家討論 C 仍是以C89/C90 為主,充份支援 C99 的編譯器並不多。 C++98 是 C++ 正式標準的第一版,正式編號是 ISO/IEC 14882-1998。正式標準推出後,陸續有各界人士提出 Defect Report(缺陷報告,簡稱 DR),標準委員會受理了這些 DR, 並經過既定的研討程序後,便有可能決定對標準進行小幅度的訂正。累積了相當數量後,便會出版 Technical Corrigendum(技術勘誤,簡稱TC)。 所謂 C++03 便是 ISO 在 2003 年所公佈對於 C++ 標準的第一版TC(簡稱TC1), C++0x 是預計的 C++ 標準的第二版,計畫將於 2009 年公佈。

Links: MSDN

使用MSDN是開發Win32程式設計的必要工具之一,就像我在學習Linux程式設計就會用到的GNU C Library或者是要開發Java程式時所用的Java Document,有一個能隨手查詢的函式庫對於程式設計師而言是非常重要的,因為沒有人能夠記住這麼龐大的函數資料。 目前MSDN已經分為兩種分別是: MSDN http://msdn.microsoft.com/library/ MSDN 2 http://msdn2.microsoft.com/en-us/library/ 依照微軟的說法,MSDN 2是專門給新版的開發軟體使用的函式庫,包括Visual Studio 2005系列以及SQL Server 2005,而MSDN則是典型的開發函式庫,想當然爾,使用自由軟體的編譯器的話,就只能查詢MSDN了,使用MSDN 2的資料到程式碼中,可能會造成不可預期的錯誤。 關於Windows軟體開發的部份大概都放在「Win32 and COM Development 」這個分類裡,例如最近在研究的網路程式,也是屬於這個類別的內容。MSDN除了有函式的功能解說外,每個類別的起始網頁,也都會寫許多關於此類別程式設計的解說,而且有些函式也有附上範例碼,與其說是個函式庫,不如說是完整的程式設計文件來的恰當。

Winsock在link時的錯誤

我寫了一個Winsock的程式,但是不管使用DevC++或是VisualC++編譯都會有linker錯誤,該如何解決? VC++的解決法 在使用到 Winsock 的原始碼最前面加入這行 #pragma comment(lib, "wsock32.lib") DEV C++的解決法 工具 -> 編譯器選項 -> 在『連結器命令列加入以下的命令』打勾後,在下面的輸入框中鍵入 -lwsock32

開啟檔案的模式的差異

開啟一個Text檔案與開啟一個Binary檔案進行讀寫有何不同? 在GNU System與相容POSIX 的系統中,開啟Text檔與開啟Binary檔案進行讀寫是無異的,不過在某些系統中,寫入Text檔與Binary檔是有所差異的,相關的資料可以參考GNU C Library的第十二章 Input/Output on Streams。 以下是此問題在GNU C library中相關內容,只擷取部份內容。 12.17 Text and Binary Streams The GNU system and other POSIX-compatible operating systems organize all files as uniform sequences of characters. However, some other systems make a distinction between files containing text and files containing binary data, and the input and output facilities of ISO C provide for this distinction. This section tells you how to write programs portable to such systems. Since a binary stream is always more capable and more predictable than a text stream, you might wonder what purpose text streams serve. Why not simply always use binary streams? The answer is that on these operating systems, text and binary streams use different file formats, and the only way to read or write “an ordinary file of text” that can work with other text-oriented program

Reference: Some Links for Winsock Programming

關於Winsock的一些資訊連結。 MSDN 藍色小鋪 使用Winsock遇到的問題 解決法 from 藍色小鋪 取得IP的範例,使用C++/C# from MSDN The Windows Socket Programming Tutorial

Byte ordering

這篇是轉載的文章,如果原作者需要小弟加入您的名稱,請告訴我喔@@ Article Source: Gray's Notes   文章連結 各種系統的Byte order 這個文章簡單的整理了幾個常見系統的Byte order。 何謂Byte order? 會有Byte order的問題主要在於當需要表現超過255的數字時,需要兩個以上的Byte。此時,究竟要以代表比較小的數字的byte先放,還是代表比較大的數字先放呢?以小的數字的Byte先放的作法就稱為little-endian。反之,以大的數字的byte先放的就稱為big-endian。 各種常見的系統其byte order如下: CPU/MCU/Hardware Little-endian: x86 DEC VAX PCI bus Big-endian: Keil C51 (8051是8 bit系統,本身原則上沒有byte order的問題。但是C51 compiler有模擬word及dword等型態,所以就有byte order的問題。) 68K DragonBall Protocol/Format Little-endian: USB protocol BMP file GIF file RTF file Big-endian: Adobe Photoshop