轉載地址:http://www.nnllok.cn/myBlog/archives/2005/1180.html
所謂的純C程式,是指該程式(包括可執行程式或庫)之原始碼所用文法嚴格遵守C89標準,且所用之庫函數,要麼為C89標準所支援之標準庫函數,要麼為第三方以純C程式所編寫之庫函數。
上面是我對“純C程式”做的一個非標準的、遞迴的定義。
使用Visual Studio的朋友們都知道,作Visual Studio套件的Visual C++整合式開發環境並沒有提供C語言編譯器,我們只能使用C++編譯器對C程式進行編譯。儘管Eckel Bruce認為,用C++編譯器來編譯C程式可以發現程式中隱含的可能的錯誤(參見《Think in C++》),但我堅持認為這不是一個好辦法:這隻會讓大家寫出那些運用了大量C++特性的C程式。這種程式是不可取的。Bjnare Stroustrup也認為,C++應當是一門獨立於C語言的、全新的程式設計語言。因此,我們需要一個能夠編寫純C程式的開發環境和編譯器。
Visual Studio .NET中的C++編譯器為我們提供了這樣功能!Visual Studio .NET中的C++編譯器不僅大大加強了對C++標準的支援,通過一些配置,還可以對純C程式進行編譯!在本文中我將對其配製方法進行一個簡要的介紹,希望能夠對那些喜歡純C程式設計的朋友們有所協助。也希望初學C語言程式設計的朋友能夠寫出漂亮的C程式。
整合式開發環境的配置
首先,在建立項目的時候,選擇Win32控制台應用程式即可,但一定要選擇“空項目”選項。這樣就能防止Visual Studio嚮導為我們產生不必要的源檔案(代碼)和設定一些不必要的編譯器選項。具體操作方法見如示:
選擇“檔案”→“建立”→“項目”:
在“建立項目”對話方塊中,在“項目類型”李表框中選擇“Visual C++項目”,並在“模板”列表框中選擇“Win32 控制項目”模板。別忘了在“名稱”文字框中輸入項目的名稱,這裡我起名為“PureC”:
點擊“確定”按鈕後,將彈出“Win32 應用程式嚮導”對話方塊,別急著點“確定”:
最初,在我看到這個對話方塊的時候,還真沒注意過“應用程式設定”這個選項(可能是我太笨了罷-_-b)。因此,我們要:
點擊“應用程式設定”選項卡,選中“附加選項”中的“空項目”:
這一步是問題的關鍵。如果我們沒有選擇“空項目”,Visual Studio .NET的嚮導會為我們添加一些支援用於支援Windows應用程式的源檔案(如“stdafx.h”、“stdafx.c”等),而且還會對編譯器進行一些設定。儘管這些設定對於編寫Windows API程式非常有用,但對於我們編寫純C程式來講,是非常不利的。因此,我們有必要選擇“空項目”。
點擊“確定”按鈕後,我們便得到了一個空的項目,觀察一下“方案總管”列表框,我們發現,已經沒有了嚮導為我們產生的煩人的多餘的源檔案了。這時,我們需要手動地將我們的源檔案添加到項目中。在這裡我們添加一個新的源檔案“PureC.c”。在“方案總管”列表框中的“源檔案”檔案夾圖表上單擊右鍵,選擇“添加”-〉“添加新項”:
在彈出的“添加新項”對話方塊中,選擇“C++ 檔案”即可。並在“名稱”文字框中輸入源檔案的名稱。注意,必須在檔案名稱中寫明副檔名“.c”,否則IDE將自動為該檔案添加“.cpp”副檔名:
接下來,我們要設定一下項目的屬性。在“方案總管”的項目(這裡是“PureC”)上單擊右鍵,在快顯功能表中選擇“屬性”。將彈出“屬性頁面”對話方塊。在左側的樹狀檢視中展開“C/C++”節點,選擇“進階”節點;在右側出現的列表框中,將“編譯為”清單項目改為“編譯為 C 代碼(/TC)”:
點擊“確定”按鈕,OK,大功告成了。
控制台選項的配置
這個題目有點……那個……了。我的直觀感覺就是用控制台命令列編譯器的人應該都是蝦(就算不是大蝦,也得是個小蝦),對於命令列的選項應該是瞭解的很了。我也就不過多獻醜了,簡單而言,只要在命令列中添加/TC選項,就可以把一個源檔案編譯為純C代碼。
測試
經過這樣一番調教,我們中有了一個能夠編寫純C代碼的環境了。空口無憑,我們得用一段程式驗證一下。為我們的PureC.c添加如下一段代碼:
/*
* Model: PureC.c
* Author: lover_P
* Date: 2004-6-3
*
* Test the pure C envirment in VS.NET
*/
struct A {
int i;
};
int main() {
A a;
a.i = 10;
}
/* end */
這段代碼對於C++程式來說是完全正確的,完全可以通過編譯且沒有錯誤和警告。但這並不是“純C程式”,因為在C標準中,當以結構類型作為變數類型時,在變數的聲明語句中必須顯式地出現struct關鍵字。因此,在我們這個“純C環境中”編譯這段代碼,將會得到N多錯誤報表。
因此,我們要把main()函數的第一行改為純C形式的聲明語句:
struct A a;
這樣,再次編譯,將是0錯誤0警告。
總結
這個“純C環境”只是輔助性的,要想學會編寫“純C程式”,首先要仔細學習標準C語言。不要指望這個環境能教會你寫“純C程式”,就像上面的例子,僅僅缺少一個關鍵字,在Visual Studio .NET 2003種將會得到這麼多錯誤:
e:/Workspace/C++/PureC/PureC.c(14): error C2065: “A” : 未聲明的標識符
e:/Workspace/C++/PureC/PureC.c(14): error C2146: 語法錯誤 : 缺少“;”(在標識符“a”的前面)
e:/Workspace/C++/PureC/PureC.c(14): error C2144: 語法錯誤 : “<未知>”的前面應有“<未知>”
e:/Workspace/C++/PureC/PureC.c(14): error C2144: 語法錯誤 : “<未知>”的前面應有“<未知>”
e:/Workspace/C++/PureC/PureC.c(14): error C2143: 語法錯誤 : 缺少“;”(在“標識符”的前面)
e:/Workspace/C++/PureC/PureC.c(14): error C2065: “a” : 未聲明的標識符
e:/Workspace/C++/PureC/PureC.c(15): error C2224: “.i”的左側必須具有結構/等位型別
如果你對標準C不是很瞭解的話,面對這麼多錯誤肯定是無從下手的。因此,語言的學習是很重要的,環境只是一個輔助的功能。
最後,祝大家能夠學好這門最NB的語言。
- 上一篇:組譯工具的編譯環境
- 下一篇:pb的error.number,各種出錯的中文解釋
※ Re:使用Visual Studio .NET編寫純C程式的提示 mountain315發表評論於2005-10-1 22:19:00 個人首頁 | 引用 | 返回 | 刪除 | 回複
和寫控制台程式一樣子,如果想要查看結果,就要用菜單調試->開始執行(不調試),就是ctrl+f5,這樣子才會留下那個cmd視窗可以查看結果的,如果用了f5,cmd視窗閃一下下就會自己關掉
還有呢,這種搞法呢,好處是比在win2000server下開啟tc20快好多,不過要記的每回都要把上一回運行過的c檔案從解決方案裡移除,才可以編譯執行另一個c檔案,因為每個c檔案裡都有一個main啊,可是一個項目裡,只可以有一個main的
還有呢,就是編譯的時候呢,會報“這些項目設定已經過時”的,沒用管,選“是”產生就成了