使用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 个 ==========

使用VS开发C语言的更多相关文章
- APP定制开发:APP软件开发的语言和开发环境
APP软件开发是移动互联网开发公司常开发的一种手机应用系统,对于刚刚进入APP软件开发领域的新手来说,选择什么编程语言和需要什么开发环境来开发APP软件是常遇到的问题.下面亿合科技小编来为大家分享下: ...
- 李洪强漫谈iOS开发[C语言-043]-判断较早日期
李洪强漫谈iOS开发[C语言-043]-判断较早日期
- 李洪强漫谈iOS开发[C语言-043]-练习
李洪强漫谈iOS开发[C语言-043]-行李重量计算价格
- 李洪强漫谈iOS开发[C语言-042]-简单计算器
李洪强漫谈iOS开发[C语言-042]-简单计算器
- 李洪强漫谈iOS开发[C语言-041]-计算月份天数
李洪强漫谈iOS开发[C语言-041]-计算月份天数
- 李洪强漫谈iOS开发[C语言-040]-switch case
李洪强漫谈iOS开发[C语言-039]-switch case 补充:
- 李洪强漫谈iOS开发[C语言-039]-剪刀石头布
李洪强漫谈iOS开发[C语言-039]-剪刀石头布
- 李洪强漫谈iOS开发[C语言-038]-if else if语句
李洪强漫谈iOS开发[C语言-038]-if else if语句
- 李洪强漫谈iOS开发[C语言-037]-if else 语句
李洪强漫谈iOS开发[C语言-037]-if else 语句
- 李洪强漫谈iOS开发[C语言-009] - C语言关键字
// // main.m // 04 - C语言关键字 // // Created by vic fan on 16/7/12. // Copyright © 2016年 李洪强. All r ...
随机推荐
- 【转】中国正爆发聊天APP大战 未来或影响西方
[搜狐IT消息]8月15日消息,<金融时报>报道称,在中国,聊天应用程序的竞争日渐激烈,腾讯.阿里巴巴都加入大战,在西方市场的未来竞争中,中国聊天应用可能会成为先驱. 一些分析师认为,快速 ...
- .NET Core:面向未来的开源跨平台开发技术
作为一种全新的开源和跨平台的开发平台,.NET Core 历经两年多的开发,终于在于2016年6月27日针对所有主流服务器和桌面操作系统发布 1.0 RTM 版本..NET Core 是一种通用开发平 ...
- wpf xaml inlines
string testBold = "<Bold>Sync Now</Bold>"; var ele = System.Windows. ...
- saiku缓存整理
使用saiku的人,肯定都有这么一个经历,查询了一次多维分析数据表,第二次之后就特别快,因为它缓存了结果,可问题是过了一天,甚至几天,来源数据早都更换了,可还是这个缓存结果.问题来了,缓存不失效! 那 ...
- [Z]CS权威会议
CS Conference TOP 40 计算机会议TOP40 一.A 类 15 个 ASPLOS: Architecture Support for Programming Languages an ...
- asp.net MVC之 自定义过滤器(Filter)
一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration:缓存的时间,以秒为 ...
- Unity3d游戏中自定义贝塞尔曲线编辑器[转]
关于贝塞尔曲线曲线我们再前面的文章提到过<Unity 教程之-在Unity3d中使用贝塞尔曲线>,那么本篇文章我们来深入学习下,并自定义实现贝塞尔曲线编辑器,贝塞尔曲线是最基本的曲线,一般 ...
- 初探 Ext JS 6 (sencha touch/ext升级版)
Sencha Touch 现在已全面升级至Ext Js 6,那么我们如何使用他们呢? 首先去官网下载最新的sdk和帮助文档 sdk下载地址:https://www.sencha.com/product ...
- 图文安装Windows Template Library - WTL Version 9.0
从http://wtl.sourceforge.net/下载 WTL 9.0,或者点此链接下载:WTL90_4140_Final.zip,然后解压到你的VC目录下面, 我的地址是:C:\Program ...
- 协作图 Collaboration diagram
概述 协作图也是一种交互图,但一般用的比较少,一般用在大概分析一下对象之间是怎样交互的,跟顺序图是可以相互转化的. 协作图的用处: 在分析的时候(而顺序图一般设计的时候),分析出有哪些对象: 在白板上 ...