关于c程序的一些思考!
我要说的是随着时代的进步编译器运行的环境也发生了改变,而任何的编译器都是针对特定的环境来设计的,他们都不可能脱离当时的软件和硬件的水平的。所以说或多或少都会与现在的系统和软件有所不同!比如说tc,显然对于tc当年他们考虑的文件名肯定是8.3的格式!那么对于这样的相对路径,".\\script\\characte\\characte.txt"相信你对于这个文件读取不会有问题,但是如果你的路径是".\\script\\character\\characterlist.txt"(我们都假设在那些路径下文件都是存在的)呵呵!对于tc那么它死活是不能正确度取得!当然那些基于tc内核制作的编译程序比如:wintc还有就是cfree等等那么都会有同样的毛病,因为他们都是基于tc内核的,而tc当年的设计(包括那些标准函数库)都是基于当时的技术来实现的!对于现在的系统都支持8.3格式,而且还支持其他的特殊的文件名字符比如说空格啊!所以说如果要跟得上时代那么我们就要用新的编译器!vc其实就是非常好的!它支持c而且他也够健壮!还有就是他调试非常的方便!它的函数库经过了不断的完善的!我们现在都用上了xp或者其他nt内核的东西。如若我们还是用以前的tc那么有些问题可能就是当年tc,和他的函数库设计的不合理。Tc还有个问题就是结构体中如果有浮点数那么,如果我们用结构体指针来访问那个浮点数一般是这样scanf(“%f”,&p->f)那么将会发生什么相信大家都遇到过就是
L例程关于tc的局限性:
#include <stdio.h>
struct Student
{
int id;
char name[10];
float math;
};
void main()
{
struct Student s[3];
int i;
for( i = 0 ; i < 3 ; i++)
{
printf("input the information Student[%d]\n",i+1);
printf("ID:");
scanf("%d",&s[i].id);
printf("NAME:");
scanf("%s",s[i].name);
printf("math:");
scanf("%f",&s[i].math);
}
for( i = 0 ; i < 3 ; i++)
{
printf("Student[%d] information\n",i + 1);
printf("ID:%d\n",s[i].id);
printf("NAME:%s\n",s[i].name);
printf("math:%f\n",s[i].math);
}
}
这个是tc运行后的结果:
看到了吗??他不能正确地处理一些东西!
这个是vc6.0的结果:
现在我们明白了,任何编译器都是有其局限性!肯定有bug!!
2例程:这个程序引用自http://bbs.bc-cn.net/bbs/dispbbs.asp?boardID=44&ID=9214&page=1
不过那个程序中的路径为c:\\c1.txt他的源程序中的路径为:ffexamine=fopen(".\\script\\character\\characterlist.txt","rt");
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
int fexamine();
void main()
{
int examine;
textcolor(11);
cprintf("[系统]");
printf("引擎正在检查必要文件,请稍后......\n");
examine=fexamine();
if (examine==1)
{
cprintf("[系统]");
printf("引擎检查完成,未发现出错文件!\n");
cprintf("[系统]");
printf("启动游戏......\n");
printf("LandyLand......\n");
}
getchar();
}
int fexamine()
{
FILE *ffexamine;
cprintf("[系统]");
printf("正在检查characterlist.txt......\n");
//这个路径是他的原来得设计目的
ffexamine=fopen(".\\script\\character\\characterlist.txt","rt");
if (ffexamine==NULL)
{
cprintf("[系统]");
printf("characterlist.txt出现错误,请按任意键退出程序!\n");
getch();
exit(1);
}
fclose(ffexamine);
return 1;
}
我们假设tc中在生成的.exe文件确实是和那个".\\script\\character\\characterlist.txt"
的路径信息一致即.exe和script文件夹在同一个目录下!!
对于这个程序:tc中不可能能够得到正确的结果即永远提示
characterlist.txt出现错误,请按任意键退出程序!
如果我们用vc6.0来编译运行,当然由于vc不支持textcolor(11);
我就把这一行注释了!
那么你运行发现结果也不对,不要急,你忘了吗!默认是调试模式默认生成的.exe
文件在debuge文件夹内!你把这个exe文件拷贝与你的script所在的目录,即让二者在同一个目录
那么再运行exe发现成功。说明vc编译执行正确!!
产生这个问题的原因我在前面已经说得很清楚了!就是那个8.3格式的限制!!!!
以上是我的总结,如有不对!大家共同批评指正,共同提高!
[此贴子已经被作者于2004-12-17 23:03:39编辑过]