主题:我有一fortran程序在dos环境下运行没错但在windowns下不能出结果请问为什摸
xueshiran
[专家分:0] 发布于 2005-09-27 17:53:00
请各位高手帮忙,我该怎摸解决这一问题,谢谢
回复列表 (共19个回复)
沙发
asymptotic [专家分:16630] 发布于 2005-09-27 19:54:00
因为 Fortran 的可移植性比较差!
板凳
mltx [专家分:20880] 发布于 2005-09-28 00:31:00
Fortran是可移植性最好的计算机语言之一。
你用的是什么编译器?是什么系统?
有些编译器能生成Dos运行软件,但不能在Win32下运行。
3 楼
asymptotic [专家分:16630] 发布于 2005-09-28 09:38:00
Fortran 和 Assembler 比,可移植性当然好啦;
C 批判 Fortran 的重要的一条就是 可移植性 差!
4 楼
mltx [专家分:20880] 发布于 2005-09-28 13:13:00
1. 我说“之一”。不排斥其他
2. 这种批判是单方面的,是针对老Fortran的,现在有多少人真正懂现代的Fortran?
3. 还是回答原问题:dos下可运行,Windows下不能运行,绝不是语言可移植性的问题,是编译器的问题。
5 楼
asymptotic [专家分:16630] 发布于 2005-09-28 15:13:00
程序编译器相关,不是和 可移植性 不好说法一样吗?
很多 C 的代码,在 Win 下可以运行,在 Linux 下也可以运行,编译器当然也不一样,因此我们说它的可移植性 好。
不对之处,敬请指正!
6 楼
mltx [专家分:20880] 发布于 2005-09-29 00:05:00
语言的可移植性 应该是指源代码不经任何修改就可以在各种平台上(用该平台上的编译器)编译执行。
标准Fortran语言的源代码,不经任何修改,就可以在Dos,Win16,Win32,Linux,Unix,VAX,。。。。上编译执行。而且,F90之后的版本,还专门增添了控制数值精度的语法功能,使得在不同平台上不仅可以运行,而且可以控制同等的精度。例如:64位机的单精度可能比32位机的单精度长一倍,这样,同一个代码,移植到64位机上可能会给出完全不同的数值结果,但是F90/95可以控制64位机上的给出同32位机上相同的数值结果(32位以内))!
早期的Fortran编译器(如MS Fortran),只能编译出DOS下运行的EXE,那种EXE就不能在Win环境下执行,甚至也不能在Win32的Dos窗口下运行,那是编译器的问题。早期的C语言编译器也是一样,其Dos下的编译器编译出来的exe,也不一定能在Win32的dos窗口下运行。这是编译器编译出来的EXE的兼容问题,例如,WinXP下的EXE属性中就有一项兼容模式的选项共用户设置。
VB是MS Windows的语言,到纯Dos环境中根本无法用,连编译器都没有,就谈不上可移植性。
探讨。。。
7 楼
asymptotic [专家分:16630] 发布于 2005-09-29 07:57:00
C 中的 编译预处理 命令就可以用来解决程序移植的问题,我们可以看看一些库文件,就可以发现其中有很多的诸如“如果定义某某平台,。。。,如果定义另外的平台,有如何如何”;typedef 就可以用来解决不同系统 --> 内部类型表示字节不同 这个差异。
很遗憾的是,Fortran 在这方面还很欠缺。VF 在这方面有所扩展,但可惜的是,它目前还不是 Fortran 的标准语法,说不定以后的新语法会加入相关的功能; Fortran90/95 已经向 C 学了不少东西,这个也是事实,因此,我深信将来的 将来的 Fortran 语法,会有 编译预处理 命令的。
8 楼
lj1982002 [专家分:430] 发布于 2005-09-29 21:05:00
是和编译器有关,我也遇到这个问题,在powerstation4.0上和在cvf上发现的错误就不一样。我个人觉得FORTRAN是编译形式的语言,可能与编译的平台有关,至于它语言本身听说有精度问题。粗浅的看法
9 楼
freebird3000 [专家分:150] 发布于 2005-09-30 12:52:00
可移植性应该并非针对编译器而言,mltx的解释应该是对的。
对可移植性,C/C++与FORTRAN应该差不多,可移植性都不错,只要程序是按照标准编写并且编译器对标准完全支持
至于编译预处理,其实针对不同的平台,自己用FORTRAN曲线实现其大部分功能也是可以的呀,如果从控制精度来说,对90以后的标准,只要按标准来,应该不需要
10 楼
professor [专家分:160] 发布于 2005-10-01 01:50:00
答复楼主一下,这是正常现象啊,呵呵。
笼统地讲,就叫软件的兼容性问题,在非商品化的软件中经常会遇到的。
楼主有源代码吗?在WINDOWS平台下重新编译连接一下吧。
我来回复