配置TC2.0运行环境
一、 学习过程
下载TC2.0并打开如图:

这是一个集成的C语言环境包,包括TC、dosbox和一些编译工具,很明显这样我无法判断单个程序的功能,也无法区分哪些程序是必须的。
那么为了搞清楚哪些文件是用来解决哪些功能的,我新建一个文件夹C:\minic用来存放已知要解决问题的文件。
避免程序通过设置搜索路径的方法找到不在相同目录的相关文件有两种方法:(1)不让设置的默认路径指向真的包含相关文件的目录。(2)把我们所要研究的系统的所有文件都拷贝到一个不可能是系统设置的搜索路径的目录中。
对于第一种方法,首先要搞清楚程序是怎么设置默认搜索路径的,我想起了在配置java环境时需要在系统环境变量里添加相关路径,这样程序在使用时才会根据这个路径找到安装的jdk,那么我们这里的程序安装时是自动添加环境变量吗?如果是这样,那么只要改变环境变量即可避免查找,但我们不知道在程序查找时是哪个环境变量起了作用。在网上的一篇资料《头文件的查找方式和库的搜索路径》里面有这样一句话:“预设的头文件目录是由编译器自己决定的”,那么也可以通过新建文件夹的方式避免查找。如果不是只通过特定路径查找固定文件而是大范围查找的话,那么就要搞清楚这个搜索的范围是多少,是搜索该文件夹下的子目录,还是搜索所有同级目录,还是搜索整个盘符的文件,还是搜索系统内的所有文件。于是就可以用方法二新建一个文件夹使它不在搜索范围内,课本上新建了D:\tc2.0文件夹,说明这个文件夹不在搜索范围内,但是我的xp虚拟机里只有一个C盘,于是我决定新建C:\tc文件夹看看,如果这个文件夹在搜索路径内的话,实验结果会与资料上不一样。创建结果如图:

把tc.exe拷贝到c:\minic并运行如图:

说明TC没有找到所需的文件,该文件夹果然不在搜索范围内。按确定后发现文件夹中出现了两个新的文件:
将tc的工作路径都清空:

编写simple.c并保存到c:\minic下:

用complie编译显示成功:

在c:\minic\PROJECT中创建了simple.obj:

用tc连接simple.obj显示错误:

原因是:unable to open input file ‘COS.OBJ’:

在C:\minic下没有simple.exe
那么我们就在原目录下找到COS.OBJ放进去,结果出现了下一个错误:

再找到EMU.LIB放进去,结果出现下一个错误:

再找到MATHS.LIB放进去,结果出现下一个错误:

再找到GRAPHICS.LIB放进去,结果出现下一个错误:

再找到CS.LIB放进去,终于成功生成了simple.exe文件:

可知TC连接一个OBJ文件所需的文件是:COS.OBJ、EMU.LIB、MATHS.LIB、GRAPHICS.LIB、CS.LIB。
二、 解决的问题
(1) java等程序是怎么查找jdk等相关文件的?答:通过系统或用户的环境变量里的路径查找。
(2) TC连接obj文件所需文件都有哪些?答:TC连接一个OBJ文件所需的文件是:COS.OBJ、EMU.LIB、MATHS.LIB、GRAPHICS.LIB、CS.LIB。
三、 未解决的问题
(1) TC程序是怎么设置默认搜索路径查找相关文件的?
(2) 为什么TC程序编译c文件不需要其他文件?
(3) TC连接obj文件的过程是什么?相关文件的功能都是什么?
四、 学习感想
我们在面对复杂和未知的事物时,要学会以简单有效的方式来分析。要在TC程序的原目录里找出C语言编译连接所必须的文件是很困难的。那么我们不妨换一种思路,TC主程序肯定是必须的,我们把主程序和外部的联系关闭,再编译运行文件,根据错误提示找出所需的文件。如果最后连接成功,那么我们找到的文件肯定就是必须的文件。这个思路在编程中很常见,我们把别人的程序拿来看,如果一个文件一个文件地看代码来搞清楚功能,那么又费时间又费精力,但是如果从功能实现的角度,我只搞清楚我要实现功能的那部分代码,甚至我只要清楚这个文件的功能和接口,甚至我只要知道这个程序是工程实现所必须的,就已经足够了。有句说佛家的三个境界:第一个是“看山是山,看水是水”;第二个是“看山不是山,看水不是水”;第三个是“看山还是山,看水还是水”。把简单的事物看复杂是要注重每一个细节,把复杂的事物看简单是注重效率,我们在做事情的时候要合理选择做事的方式才能事半功倍,实现最大的价值。
配置TC2.0运行环境的更多相关文章
- VScode配置CMD本地运行环境(2.0)
VScode配置CMD本地运行环境(2.0) 官方Task.json说明 完整的Task.json配置信息 Task.json预定义变量 看了很多网上的教程都说需要下载VScode的python插件, ...
- 配置perl-cgi的运行环境,由于Active Perl安装在d:\perl
Apache 1.3.22 for Win32+PHP 4.0.6+Active Perl 5.006001+Zend Optimizer v1.1.0+mod_gzip 1.3.19.1a+MySQ ...
- 在VS2017(VC15)上配置opencv4.0.1环境
在VS2017(VC15)上配置opencv4.0.1环境 转 https://blog.csdn.net/GoldenBullet/article/details/86016921 作为萌新最初 ...
- vsCode怎么为一个前端项目配置ts的运行环境
vsCode为一个前端项目配置ts的运行环境,ts文件保存的时候自动编译成js文件: 假设此前端项目名称为Web:文件结构如图 1. 在根目录中新建一个“.vscode”文件夹,里面建一个“tasks ...
- AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- Spark2.1.0——运行环境准备
学习一个工具的最好途径,就是使用它.这就好比<极品飞车>玩得好的同学,未必真的会开车,要学习车的驾驶技能,就必须用手触摸方向盘.用脚感受刹车与油门的力道.在IT领域,在深入了解一个系统的原 ...
- 腾讯云极速配置NodeJS+LNMP运行环境
版权声明:本文由吴逸翔原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/848754001487150669 来源:腾云阁 h ...
- mac 安装nginx,并配置nginx的运行环境
1. 安装nginx // 查询有没有nginx brew search nginx //开始安装nignx brew install nginx 2. 检查nignx是否安装成功 nginx -V ...
- [IOT] - 在树莓派的 Raspbian 系统中安装 .Net Core 3.0 运行环境
之前在 Docker 中配置过 .Net Core 运行环境,地址:[IOT] - Raspberry Pi 4 Model B 系统初始化,Docker CE + .Net Core 开发环境配置 ...
随机推荐
- windows 10是如何做到全平台统一的?
1.EXE本身就是个容器,它可以在ARM平台上包含ARM的native code执行,也可以在x86平台上包含x86的native code执行,本质上无差别(所以麻烦那些说EXE不能在ARM平台上运 ...
- /dev/urandom
/dev/urandom则是一个非阻塞的发生器: dev/random的一个副本是/dev/urandom (”unlocked”,非阻塞的随机数发生器),它会重复使用熵池中的数据以产生伪随机数据.这 ...
- COJ 0026 汉诺塔问题
汉诺塔问题 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK ...
- javascript变量:全局?还是局部?这个得注意!
做项目就是一个学习的过程! 做为一个学习C3年多,从C程序员转前端的人来说,javascript中的许多规则是没办法或者说一时半会理解不了的. 今天就遇到了一个,大致就是这么个代码. var a ; ...
- HDU_2012——判断表达式是否都为素数
Problem Description 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数. I ...
- Spring MVC在接收复杂集合参数
Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是applica ...
- cocoapods 的使用心得
一般我们下载的demo里边含有cocoapods 我们需要 在终端上输入命令,让他能够成功运行 步骤如下: 打开终端 cd 项目目录 直接拖动到终端里边就可以, 然后 pod install 如果 ...
- [C/C++标准库]_[0基础]_[交集和补集]
场景: 1. 计算std::vector A和 std::vector B里的同样的元素, 用于保留不删除. 2. 计算std::vector A和 std::vector B里各自的补集, 用于删除 ...
- [ES6] Export class and variable
Export variable: export const MAX_USERS = 3; export const MAX_REPLIES = 3; Export default class: exp ...
- [ES6] Rest Parameter
Problem with the ES5: function displayTags(){ for (let i in arguments) { let tag = arguments[i]; _ad ...