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

來源:互聯網
上載者:User
使用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的語言。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.