回 帖 发 新 帖 刷新版面

主题:TurboC2.0中的运行问题~请指教

大哥们帮帮小弟,小弟是菜鸟,最近刚学C语言,发现我下载的TurboC2.0不能运行!
就比如说最简单的代码:
#include<stdio.h>
main()
{
  printf("hello,world\n");
}

运行时它会出现
Error:Unable to open include file ‘STDIO.H’
我的安装路径是默认的C盘路径~请各位知道的朋友们告诉我
不能运行我就没法编程了

回复列表 (共2个回复)

沙发

我的问题跟你的一样啊

板凳

[
这段东西是我为了回复本论坛一个帖子赶出来的,为了它我都错过了晚饭时间,还算敬业吧 ^_^
为了提醒各位注意,特单独贴出来,以飨各位同行!
欢迎提出宝贵意见!
2003.10.9 晚
]

什么叫TC IDE?

    IDE就是指你打开tc时看到的窗口,它的学名叫集成开发环境(Integrated Development Environment).下面提到的IDE就是它的简称。 TC IDE当然就是TC集成开发环境了,另外你会见到VC IDE等等,都是指这个。

如果你是用TC3.0或者BC3.1,我先给你介绍N个路径:
1。TC路径:
    就是TC的安装路径,默认安装在C:下,因此将是C:\TC,如果曾经更改驱动器,做相应修改即可。甚至也可以是驱动器下的子文件夹,比如,D:\WORK,此时的TC路径就是D:\WORK\TC。

2。bin路径:
    这个路径下包含TC工作的所有需要的可执行文件,比如TC.exe,TCC.exe,MAKE.exe,Link.exe等等。这些文件之所以称为可执行文件,原因当然是都是二进制(bin正是binary的缩写)文件,它们的特征就是,都可以在命令行方式下运行,只不过有些文件需要输入命令行参数而已。对于曾经编写过带有main参数的C或C++程序员来说,他们最清楚命令行参数的意义和作用了。关于此问题可以专门开辟一个话题来讨论。不过这里可以说明的一点就是,TCC.exe、Make.exe、link.exe这3个文件便是典型的需要命令行参数也就是main参数才能正确执行的程序了。

3。工作路径:Work Directory
    默认当前打开位置。这个问题有点复杂,不过说清楚了也很简单。复杂就复杂在默认上面。究竟它默认什么呢?首先我说这个问题跟IDE的打开方式有关。一种方式是直接在bin目录下点击tc.exe,或者将命令行路径设置到bin目录,然后输入tc(回车)后打开的方式。可以不恰当的说这叫标准方式。如果你是安装TC后第一次打开IDE,那么以这种方式打开后的IDE界面将是很干净的那种,就是说不会出现上次未关闭的文件窗口。这种方式的工作路径就是bin路径。因为你是进到bin路径下打开的TC IDE。第二种打开方式很特别,就是你在其他路径下建立TC.exe的快捷方式(如何建立快捷方式属于系统基本操作方面的东西,我暂时假定大家都会,如果不会,可以单独讨论),当然了,这个快捷方式也可以在bin路径下,这并不是没道理的,好像bin路径下的快捷方式经常会自动生成。 不管快捷方式在哪里,只要是有效的,那么点击它都可以打开TC IDE,而且这样打开的IDE的工作路径就是此快捷方式所在的路径,而不是bin路径,尽管实际上打开的IDE仍然是bin下的TC.exe.还有一种打开方式,这个恐怕就更复杂,其实操作起来是最简单的。就是设置文件关联。比如你想直接点击.c或者.cpp文件就能用TC.exe打开,像点击.txt文件就能直接用记事本打开那样,方法就是设置文件默认打开方式为tc.exe。方式跟操作系统相关,但是windows系列的大都差不多,就是右键点击.c或者.cpp文件选择文件打开方式,查找可执行程序,浏览bin目录,找到tc.exe,然后选中“始终使用此程序打开该文件”,确定既可。完了之后你可能会发现凡是以.c或者.cpp为后缀名的文件图标都变了,这无所谓,这说明你的设置生效了。如果图标没变也无所谓。此后你每次点击.c或者.cpp文件,便可以直接看到TC IDE窗口及文件源代码了。说了这么多无关的话,其实就是一个目的,在文件当前位置打开,这样打开后的IDE的工作路径就是当前源文件的路径。上述三种方式打开文件后IDE都会给你指定当前路径,但是如果忘记自己当初如何打开的怎么办呢?当然有一个地方可以看到,那就是IDE的file菜单下的Change dir...下的显示路径。到这里你可能也发现了,是不是也可以自己随时修改阿?你真聪明!没错,You can change it!改了之后的路径就是当前的工作路径了。说了这么多,大概你最想知道的就是这个路径是干什么的?改不改有什么必要?没错,你的问题又问到点上了。这个问题我留在本贴的最后给你回答。记住咯!

4。包含路径:Include Directories
    默认是而且应该是 TC路径\Include,否则程序在编译时将会报错,比如前几天几个帖子问到的,怎么找不到stdio.h啦等等,原因就在这里没有按要求设置。再通俗点讲,如果你把TC下的Include文件夹单独搬到了西伯利亚,那么你就写 西伯利亚\Include.

5。静态库路径: Library Directories
    唯一跟包含路径不同的是把Include对应改成lib,如果你把TC路径下的lib改名叫john,那么你就应该改成 TC路径\john.
6。输出路径:Output Directory,就是你的源程序编译生成的.obj,.exe等存放的路径,默认是工作路径,当然你可以修改成你指定的路径。修改方式我下面会说明。

7。源代码路径:Source Directory.
   英文意思是:It is the directories where the integrated debugger looks for source code to libraries that do not belong to the open project.
意思是一个使用连接库的工程在被集成调试器调试的时候为调试器指定的连接库的源代码路径。因为使用了连接库的工程原本不可以开放库程序的源代码的。这个路径只在调试连接库时用到,因此对于初学者,尤其是不涉及编写连接库的程序时,大可不理它。
[2004.5.14修订]

    以上后四个路径你可以在Options\Directories下的窗口中看到,当然你也可以在这里修改。

源文件到可执行文件的过程:

    在窗口上编写完源代码后点击Compile菜单下的Compile子项或者按提示执行快捷键(Alt+F9)就是编译源文件,此过程完成后,你将会在“输出路径”下看到.obj文件,这就是编译的结果。然后你需要连接(link),同在这个菜单下第三项就是该命令。只有第一步Compile成功后才可以做这步,否则这一步是不可能成功的。只有这步成功后,你的程序才可以算是可以运行。这一步如果成功,你将会在"输出路径"下看到对应的.exe文件。对于上面两步,你可以直接点击Compile\Make (F9)一次完成,当然如果有错,也会看到IDE的Message窗口中给出的提示信息。在此我插一句不相干的话,以后请到论坛上问问题的同学把这个Message的信息一并给上来。
做完上面的步骤你是不是根本就没看到程序运行结果?对了,你要看到就见鬼了!
我告诉你怎么办吧,上面两个步骤完了之后能看到.exe文件,说明你的文本源代码已经被tc的集成开发包处理完毕了,也就是说你已经见到你的劳动成果了,它就是那个.exe文件。至于这个文件如何处理,如果它的功能很强的话,你可以用它来操纵无人驾驶飞机,发射导弹,如果很弱的话,你大概只能看到“Hello World!”了。说了这么多,再给你说一句掏心窝子的话,那个exe跟tc.exe有什么区别?不就是文件名吗?不就是执行效果吗?所以说,它就是一个真正的可执行文件,你可以点击它运行,然后察看运行结果,同样也可以在命令行方式下运行,同样你会看到运行结果。不过为了调试方便,为了能马上看到源文件编译连接后的执行结果,IDE为你提供了方便的操作接口,就是Run\Run(Ctrl+F9)命令,点击它或者按快捷键Ctrl+F9你就可以相当于在外面直接点击看到那个可执行文件一样的执行效果了。

    还有几点需要补充: 关于查看窗口(Window\User screen(Alt + F5))功能。
因为是这样的,只有输出功能的程序执行完毕后它就会自动关闭,不会等着你看运行结果,所以你需要执行这个命令来查看。但是你想一个成熟的程序总不能离不开IDE吧,就像是小孩子,总得有离开妈妈的怀抱的时候吧,否则会叫人家同龄人笑话“乳臭未干”的,所以,为了避免这个问题,就出现了使用程序语句控制的“曲线救国”方式,大家应该见过程序代码中恁多的getch()或者getchar(),就是“干这个使”的。当然了,用它们可不是白用的,不能少了#include <conio.h>(对于getch()),而getchar()被包含在stdio.h中,这个文件一般是不会被丢掉的,但是如果真是出现找不到getchar的错误,你就该想到是什么原因了。关于它们哥俩的具体使用方式和差别我就不在这里废话了。否则会叫人骂的——这么简单的问题还这么废话!我想有些人这时也会站出来为我辩护:我还想叫他多说两句呢,就你们多管闲事!
呵呵,所以阿,我就折衷了,只说一半!该不会两边都骂我吧?那我就失策了!

    说了这么多,记得有一个承诺还没兑现:就是关于那个工作路径的问题。
    好了,这里简单的说一下,这个路径跟源文件中涉及到的对文件的包含和读写有关。
比如
#include <conio.h>

#include "conio.h"
的区别就在于前者是当前第一查找“包含路径”而后者当前第一查找工作路径,所以说,对于像conio.h这样的编译系统头文件,你就是用前者,而别用后者,而对于用户自定义的比如myfile.h,myfile.cpp等等文件,你就是用后者。这样能提高连接速度。

    然后还有一点,就是在图形模式初始化中遇到的情况,
initgraph(int *,int *, char *);
这里的第三个参数是BGI文件的路径,这下你可能抢先发话了,“不就是把TC路径下的BGI写到这里吗?”没错!你算领会精神了。

    像这种类似于写文件路径的代码,通常有两种方式,一个就是绝对路径,这没得说,再就是相对路径,初次学编程的人可能到这里就犯愁了,这么多路径,相对谁呢?或者你懂得稍多点,说“大概就是那个那个吧”,说了半天,你还是不敢确定,万一下次我重新用另一种方式打开这个文件或者其他文件呢?难不成还会变?
有这个想法是对的,没这个想法是不可原谅的,因为编程,或者更广义点讲,学计算机,必须叫真,是一就是一,是二就是二,不能来马虎!我也不给你们废话了,直接告诉你们答案好了,这个相对的路径就是上面我提到的“工作路径”!

    这里面有些东西在TC2.0这个老爷车里是不一样的。比如使用某些函数不需要包含头文件(printf,getch等等),BGI相对路径就是当前路径等等,这不能用上面的模式照搬。东西要学活,学活了你也就懂得了如何应付千变万化!


    另外需要强调的一点是:对于IDE环境设置方面的路径填写,目录分隔符"\"只需要单斜杠,而程序源代码中,包括预编译指令#include 中的文件路径一旦需要使用目录分隔符,都要用"\\"来代替。"."表示当前目录,".."表示上级目录,因此"..\\BGI"表示上级目录下的BGI子目录,实际上BGI就是和当前目录(假如是bin) 是相同级别的,它们都在TC目录下。

以上是作者:meteor135在新手入门区写的帖子,我转载过来,肯定能解决你们的问题我刚开始用的时候也是遇到了你们的问题,当我看完这个帖子的时候就解决了这个问题。

我来回复

您尚未登录,请登录后再回复。点此登录或注册