我正在尝试编译一个解决此处可用球体上的Navier-Stokes的项目: https://fms.gfdl.noaa.gov/gf/
使用的默认编译器是ifort,我想使用gfortran,因为我想让它最终可供任何想要使用它的人使用。
在代码中的某些点,有
之类的语句if (x == y)
,其中x和y都是包含整数,实数和指针的派生类型(称为domain1d / 2d)。 gfortran抱怨说比较是在非数字和退出之间。
然后我下载了ifort的试用版,它编译没有问题。
所以,我想知道这是否是某种类型/结构的每个成员的实际比较的ifort简写(我更熟悉C术语!)或者我是否遗漏了一些基本的东西,对fortran来说是新手?
我理解比较派生类型有时候没什么意义,但这里似乎只是检查两者是否携带相同的信息。
谢谢, 喜悦
答案 0 :(得分:1)
理查德W是对的。我遇到了NOAA大气代码的类似问题。这是旧版GCC中的一个错误(它在4.47而不是在4.8中影响了我)。出于某种原因,重载.EQ。 不重载==反之亦然(如果你看一下domain1D的实现,它肯定会重载.EQ。然后==显示在代码中的其他地方)。我通过确保.EQ来解决问题。或者==始终使用。
据我所知,.EQ。和==应该是等价的(我没有在标准上看起来那么难)这就是为什么ifort(在我的情况下,SGI Fortran编译器)没有遇到这个问题。