y56i89 发表于 2020-4-28 18:05:31

ivf和gfortran编译同一个文件,一个报错一个通过

因为组传代码需要再用,所以初学fortran
其中有一个静态库需要调用所以用ivf进行编译,发现有两个.f90文件报出以下几种错误:

error #6633: The type of the actual argument differs from the type of the dummy argument.
error #6631: A non-optional actual argument must be present when invoking a procedure with an explicit interface.
error #7977: The type of the function reference does not match the type of the function definition.

查了下是关于函数形参实参类型不一致等的问题所以不能编译,问题是以前他们用的时候从没有说会在这里报错,似乎也没出过问题。

后来就用gfortran试着编译了一下,发现居然都没问题,全部顺利编译打包。不知道是不是两个编译器检查的程度不一样。
但是主力用的是ivf所以还是想搞清楚要是不改源码怎么能让它们通过编译。

环境是vs 2017+intel parallel studio XE 2018 update 3 和codeblocks 17.12

附件里是源码,需要打包成一个静态库。






kyra 发表于 2020-4-28 19:20:58

祖传代码这种问题简直太正常了。祖传的人自己都不知道(因为它们用的编译器太古老,不会做这些高级的检查)
gfortran也可以开启检查,但是默认不开启。

intel fortran 在这方面就非常好,默认开启,更易于发现隐藏的错误。

遇到这种情况,把代码改规范就好了。这是最佳选择。
如果不想这样,可以让 intel fortran 忽略函数接口检查。

在VS中这样操作:项目菜单,属性,Fortran,Diagnostics,Check Routine Interfaces /NO

y56i89 发表于 2020-4-29 11:02:18

kyra 发表于 2020-4-28 19:20
祖传代码这种问题简直太正常了。祖传的人自己都不知道(因为它们用的编译器太古老,不会做这些高级的检查) ...

谢谢谢谢!放宽接口检查就通过了,报错实在是太多,改起来还不如重写了
页: [1]
查看完整版本: ivf和gfortran编译同一个文件,一个报错一个通过