一、 学习过程

下载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运行环境的更多相关文章

  1. VScode配置CMD本地运行环境(2.0)

    VScode配置CMD本地运行环境(2.0) 官方Task.json说明 完整的Task.json配置信息 Task.json预定义变量 看了很多网上的教程都说需要下载VScode的python插件, ...

  2. 配置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 ...

  3. 在VS2017(VC15)上配置opencv4.0.1环境

    在VS2017(VC15)上配置opencv4.0.1环境   转 https://blog.csdn.net/GoldenBullet/article/details/86016921 作为萌新最初 ...

  4. vsCode怎么为一个前端项目配置ts的运行环境

    vsCode为一个前端项目配置ts的运行环境,ts文件保存的时候自动编译成js文件: 假设此前端项目名称为Web:文件结构如图 1. 在根目录中新建一个“.vscode”文件夹,里面建一个“tasks ...

  5. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  6. Spark2.1.0——运行环境准备

    学习一个工具的最好途径,就是使用它.这就好比<极品飞车>玩得好的同学,未必真的会开车,要学习车的驾驶技能,就必须用手触摸方向盘.用脚感受刹车与油门的力道.在IT领域,在深入了解一个系统的原 ...

  7. 腾讯云极速配置NodeJS+LNMP运行环境

    版权声明:本文由吴逸翔原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/848754001487150669 来源:腾云阁 h ...

  8. mac 安装nginx,并配置nginx的运行环境

    1. 安装nginx // 查询有没有nginx brew search nginx //开始安装nignx brew install nginx 2. 检查nignx是否安装成功 nginx -V ...

  9. [IOT] - 在树莓派的 Raspbian 系统中安装 .Net Core 3.0 运行环境

    之前在 Docker 中配置过 .Net Core 运行环境,地址:[IOT] - Raspberry Pi 4 Model B 系统初始化,Docker CE + .Net Core 开发环境配置 ...

随机推荐

  1. Linux系统编程(31)—— socket编程之TCP详解

    TCP有源端口号和目的端口号,通讯的双方由IP地址和端口号标识.32位序号.32位确认序号.窗口大小稍后详细解释.4位首部长度和IP协议头类似,表示TCP协议头的长度,以4字节为单位,因此TCP协议头 ...

  2. 32G sd卡格式化成fat

    fat文件系统格式只支持4G及以下的内存空间的存储设备,对于4G及以上的存储设备可以使用fat32或ntfs文件系统,建议使用ntfs文件系统,这样可以最有效地利用存储设备的存储空间,而且可以减少出现 ...

  3. 兼容ie6/ff/ch/op的div+css实现的圆角框

    <!DOCTYPE html> <html> <head> <title>青春不迷茫:寻梦时代的“蚁族”逆袭之旅- 职场管理专题-中国人力资源开发网-中 ...

  4. java中paint repaint update 之间的关系

    最近总结了一下java中的paint,repaint和updata三者之间的关系,首先咱们都知道用paint方法来绘图,用repaint重绘,用update来写双缓冲.但是他们之间是怎么来调用的呢,咱 ...

  5. JDBC批量插入数据效率分析

    对于需要批量插入数据库操作JDBC有多重方式,本利从三个角度对Statement和PreparedStatement两种执行方式进行分析,总结较优的方案. 当前实现由如下条件: 执行数据库:Mysql ...

  6. servlet过滤器配置白名单、黑名单

    1.web.xml配置 <filter> <description>过滤是否登陆</description> <filter-name>encoding ...

  7. js 获取10个不重复随机数

    var arr1 = new Array(); var arr2 = new Array(); for(var i = 0; i<20; i++){ arr1.push(i); } for(va ...

  8. Codeforces Round #FF (Div. 2):Problem A - DZY Loves Hash

    A. DZY Loves Hash time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. HashMap学习笔记

        概述   HashMap是Map接口的一个哈希表的实现,内部是一个数组表示的.数组中的元素叫做一个Node,一个Node可以一个是一个简单的表示键值对的二元组,也可以是一个复杂的TreeNod ...

  10. netstat 命令详解

    netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的状态信息,在我的计算机上执行netstat后,其输出结果为:netstat命令是一 ...