使用VS开发C语言

在嵌入开发板上做了一段时间的C语言开发后,今天突然心血来潮,想起大学时期在TurboC和TC3下写代码的情形。大一时宿舍里有台386(在当时是算比较先进的了),大一大二基本上都在玩DOS和WIN31、

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

在嵌入开发板上做了一段时间的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
运行通过。截个效果图:
使用VS开发C语言
发现DOSBOX默认的速度很慢,上面是我不停地按了十几下Ctrl+F12,把速度调高后运行的结果。
遥想当年,在艰苦的环境下还能兴致勃勃地编程,没有可用的第三方控件,所有东西都要自己弄,包括界面菜单、图形、鼠标、键盘、地图、雷达、滚屏、寻路和攻击算法等,通通都要自己实现。可能有点吹嘘的成份,但还真是不容易。
现在来说,除了学习之外,已经很少人在DOS下用TC编程了。本文只是在怀旧的同时,解决了压在我心里的困惑,并再次验证了用VisualStudio维护编辑不同平台下的C代码的可行性。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120579.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 通过和resnet18和resnet50理解PyTorch的ResNet模块

    通过和resnet18和resnet50理解PyTorch的ResNet模块文章目录模型介绍resnet18模型流程总结resnet50总结resnet和resnext的框架基本相同的,这里先学习下resnet的构建,感觉高度模块化,很方便。本文算是对PyTorch源码解读之torchvision.modelsResNet代码的详细理解,另外,强烈推荐这位大神的PyTorch的教程!模型介绍resnet的模型可以直接通过torchvision导入,可以通过pretr…

  • 获取WebView里的网页文本内容[通俗易懂]

    获取WebView里的网页文本内容

  • 电容触摸屏GT911、GT928、GT9147的使用

    电容触摸屏GT911、GT928、GT9147的使用一、介绍与硬件连接GT911、GT928、GT9147都属于GT9系列非单层多点触控芯片,他们支持的触控点数不同(GT928支持10个点、GT911支持5个点)、驱动和感应通道也可能不同。可是他们的寄存器和IIC通讯时序是相同的,也就是说驱动程序是兼容的。与主机的接口共有6PIN,分别为:VDD、GND、SCL、SDA、INT、RESET。INT、RESET…

  • 医学图像处理最全综述「建议收藏」

    目录0、引言1、病变检测2、图像分割基于深度学习的医学图像分割与检测3、图像配准图像配准的定义4、图像融合5、预测与挑战6、结论参考文献0、引言医学图像处理的对象是各种不同成像机理的医学影像,临床广泛使用的医学成像种类主要有X-射线成像(X-CT)、核磁共振成像(MRI)、核医学成像(NMI)、超声波成像(UI)四类。在目前的影像医疗诊断中,主要是通过观察一组二维切片图象去发现病变体,这往往需要借助医生的经验来判定。利用计算机图像处理技术对二维切片图象进行.

  • 转:用C++实现的一种插件体系结构—–概述

    转:用C++实现的一种插件体系结构—–概述

  • winrar 去广告 使用 hxd 或 任意二进制修改器

    winrar 去广告 使用 hxd 或 任意二进制修改器不喜使用winrar,但是winrar解压算法偶尔会更新,其他解压缩软件没有及时更新,就会造成只能用winrar来解压的情况参考方法来自https://www.52pojie.cn/thread-648133-1-1.html只是觉得用ResHacker太麻烦“##0aN9…”这串字符串是以宽字符串为保存的,如果要用搜索字符串方法,需要用搜索unicode字符串…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号