使用Visual Studio .NET編寫純C程序的提示

使用Visual Studio .NET編寫純C程序的提示

作者:lover_P


    所謂的純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應該是獨立於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的語言。



 
發佈了2 篇原創文章 · 獲贊 13 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章