fortran77格式程序从windows下移植linux下遇到的两个问题

    这些日子,负责将199几年的fortran77格式的六个fortran计算处理程序从windows下cvf编译运行的,通过修改但不能违背源程序功能的原则下将其移植到linux下,我选择了gfortran作为linux下的编译器,本来我想用g77编译器,毕竟同属老一代的。但发现g77编译器对fortran的open函数不能设置高低字节顺序,即它不识别open函数的CONVERT='BIG_ENDIAN'的参数。而且我所安装的ubuntu默认的是低字节在前。因此我选择了gfortran作为我的fortran编译器;下面记录下我在编译过程中主要遇到的问题以及自己给出的解决办法,为自己以后遇到同样的问题提供参考。

    1,fortran语言的隐含类型声明;

隐含约定:I-N规则
  凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。在cvf中不知道为什么,一些变量以I开头(即默认为整型数据类型)用data语句赋值为字节的字符串,比如:DATA NAMEI/'DEN ','CN ','GR  ','RT  ','RX '/即将整型数组赋值为NAMEI(1)=DEN,.....;在cvf中是允许的,只不过编译器自动转换ascii码,而这个转换挺有意思的,它首先取出16(2字节整型)因为是高字节在前,低字节在后;前8位表示C的ascii值,后八位表示N的ascii值。合起来的16位在转换为整数,就是NAMEI(1)=‘CN’的真正值。如果是CONVERT='LITTLE_ENDIAN,则是另一个值了,这也是为什么字节顺序在这里如此重要了。而gfortran不支持这种转换,它直接抛出类型不符的编译错误。而这样的赋值5,6个而且每个都是上百的二维数组。当时要么改类型,要么改值;即将NAMEI声明为character型或者按照cvf的转换方法,把每个值算出来,重新赋值。如果改类型的话,那么整个程序用了这个变量的语句就都要修改,而且如果它进行运算的话,那连着与它进行运算的变量也要改动,还不如重写程序,但是这个程序是涉及专业领域的,自己能力不够,于是采取第二中方法,幸好我用cvf下的调试器把每个变量的值都显示出来,然后对着变量一一修改,虽然笨。但总算解决了。

    2,fortran局部变量的save属性

      在cvf中每个子例程的局部变量默认save属性为true,而gfortran则不一样,因此每次进入子例程,gfortran给局部变量一个随机值,运行就会出现段错误,找到原因就很好解决了,找到那个子例程,在子例程名后一行添上SAVE就行了。这个虽然容易,但当时不知道,硬是费了一番功夫。

其他的一些语法上的不同,就不细说了,总之编译器怎么提示你的,你就顺着它的意思,然后对比它们的语法格式修改就行了,有些时候也可添加一些过渡语句(只要不影响程序的功能就行),这些很好解决,书上,网上的参考资料很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值