使用VS開發C語言


在嵌入開發板上做了一段時間的C語言開發后,今天突然心血來潮,想起大學時期在TurboC和TC3下寫代碼的情形。大一時宿舍里有台386(在當時是算比較先進的了),大一大二基本上都在玩DOS和WIN31、WIN32、WIN95,那時的編程工具也只有BASIC和TC。當然還有dBASE和foxBASE,但我認為那些是數據庫,不是編程語言了。后來在WIN95、WIN98下就有VB、BC++和CBuilder了,再后來又接觸到Delphi、VC和JAVA了。再后來就發現到處都是編程語言了。

接觸到CBuilder和Delphi后,才發現原來WINDOWS編程可以這么簡單,所以就拋棄了BC++和VC。那時有句名言:真正的程序員用C,但聰明的程序員用Delphi。可見Delphi對編程史的沖擊有多大,足可以跟C語言相提並論了。Delphi本身只是個工具,它擴展了Pascal語言,封裝了WINDOWS的API,形成非常優雅和強大的編程風格。后來有人認為C就是VC,拿VC跟Delphi比,這在一定程度上是可以理解的,畢竟VC和Delphi都只是工具;但其實VC着重的是C++,而不是C,可以說只會VC的話還是有點夠不上“真正的程序員”那句話的標准的。

我一直有保存代碼的習慣,因此大學時期寫的比較象樣的代碼我基本都有保存。一開始是保存在五吋盤上,后來就是三吋盤,畢業時就把所有內容壓在幾張三吋盤上了。工作后買了電腦,就一直保存在硬盤里了。TC2和TC3這兩個經典的編程工具,我也一直都有。於是趁着今天有點時間,好好的懷舊了一把。

我找了個大三時寫的小游戲的代碼,准備編譯運行一把。當時C&C(后來發展成紅警)非常流行,我也就隨大流寫了個模仿C&C的小游戲。由於該游戲用了DOS下的EGA圖形界面,所以不能直接在XP以上的WINDOWS下運行,只能在DOS環境下跑了。我機上有MSDOS6.22的VMWARE虛擬機,把它開起來,裝了個TC3,配置好路徑和選擇,編譯一下,結果報了個全局變量太大的錯失敗了。因為我這個游戲代碼只有一個C文件,內容較大,用TC2編譯不了,記得當時還是用TC3的在WIN32下才能編譯通過,不然就要改代碼,去掉一部分不是必須的功能(如地圖編輯)。

改了一下,發現在里面用TC編寫代碼真是無法接受,連常用的選擇塊、復制粘貼都相當別扭,習慣差太遠了(真不知以前沒WINDOWS的時候是怎么過來的,要記住多少快捷鍵啊)。實在受不了,還是把VMWARE虛擬機關了,決定用Visual Studio來編寫。懷舊一下:用VC(VS2008)編譯DOS下TurboC(TC3)的C程序 http://hovertree.com/menu/c/

把TC3和代碼解到E盤DOS目錄下,照着我前面寫的《在Visual Studio下維護嵌入式系統C源碼的一個實例》一文的步驟,在VS下建了個vsyt工程。由於WINDOWS下是可以直接運行DOS命令的,因此寫了個編譯的批處理命令gen_yt.bat:

 

E:

cd /dos/tc3/src/yt

set PATH=E:/dos/tc3/bin;%PATH%

../../bin/tcc -mh -Y -f87 -IE:/dos/tc3/include/ -LE:/dos/tc3/lib yt.c GRAPHICS.LIB

將該批處理命令設置為工程的“生成”命令行,然后執行生成,VS輸出窗口顯示編譯錯誤:

 

------ 已啟動生成: 項目: vsyt, 配置: Debug Win32 ------

正在執行生成文件項目操作

Turbo C++ Version 3.00 Copyright (c) 1992 Borland International

yt.c:

Error yt.c 4272: Too much global data defined in file in function doenimy

*** 1 errors in Compile ***

        Available memory 3624520

生成日志保存在“file://e:/dos/TC3/src/yt/Debug/BuildLog.htm”

vsyt - 0 個錯誤,0 個警告

========== 生成: 成功 1 個,失敗 0 個,最新 0 個,跳過 0 個 ==========

VisualStudio報告是成功了,其實看日志就知道是編譯失敗了,只是VS沒截到錯誤而已。以前總也弄不明白,這個錯誤該如何修改代碼避免,只會不斷的修改內存模式。這個問題困擾我很多年,我知道是程序太大了,但一直都沒有時間去搞懂具體原因。現在想來,應該是DOS下程序大小有640K限制,堆棧則是64K的限制,編譯單個C文件也相應地會有代碼大小的限制,而全局變量的限制則更低。因此首先把C文件分解成多個,用extern聲明各函數在外部實現。再相應修改編譯批處理命令:

 

E:

cd /dos/tc3/src/yt

set PATH=E:/dos/tc3/bin;%PATH%

tcc -mh -Y -f87 -IE:/dos/tc3/include/ -LE:/dos/tc3/lib yt.c bmp.c draw.c game.c YMenu.c Run.c GRAPHICS.LIB

一番試驗修改后,編譯通過:

 

------ 已啟動生成: 項目: vsyt, 配置: Debug Win32 ------

正在執行生成文件項目操作

Turbo C++ Version 3.00 Copyright (c) 1992 Borland International

yt.c:

bmp.c:

draw.c:

game.c:

ymenu.c:

run.c:

Turbo Link  Version 5.0 Copyright (c) 1992 Borland International

        Available memory 3598664

生成日志保存在“file://e:/dos/TC3/src/yt/Debug/BuildLog.htm”

vsyt - 0 個錯誤,0 個警告

========== 生成: 成功 1 個,失敗 0 個,最新 0 個,跳過 0 個 ==========

由於使用了DOS的圖形界面,生成的程序直接在XP、WIN2K、WIN7下是跑不了的,只能在虛擬機上跑。為方便調試,我裝了個DOSBOX,直接在WINDOWS下虛擬DOS,這樣就不用來回COPY文件了。啟動DOSBOX,輸入以下命令:
moun C E:/dos
C:
cd TC3/SRC/YT
yt.exe
運行通過。截個效果圖:
發現DOSBOX默認的速度很慢,上面是我不停地按了十幾下Ctrl+F12,把速度調高后運行的結果。
遙想當年,在艱苦的環境下還能興致勃勃地編程,沒有可用的第三方控件,所有東西都要自己弄,包括界面菜單、圖形、鼠標、鍵盤、地圖、雷達、滾屏、尋路和攻擊算法等,通通都要自己實現。可能有點吹噓的成份,但還真是不容易。
現在來說,除了學習之外,已經很少人在DOS下用TC編程了。本文只是在懷舊的同時,解決了壓在我心里的困惑,並再次驗證了用VisualStudio維護編輯不同平台下的C代碼的可行性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM