Fortran Coder

查看: 7834|回复: 2
打印 上一主题 下一主题

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

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
23 元
贡献
11 点
跳转到指定楼层
楼主
发表于 2020-4-28 18:05:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
因为组传代码需要再用,所以初学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

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

misc.zip (30.62 KB, 下载次数: 1)




分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

260

帖子

0

主题

0

精华

版主

World Analyser

F 币
722 元
贡献
512 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
沙发
发表于 2020-4-28 19:20:58 | 只看该作者
祖传代码这种问题简直太正常了。祖传的人自己都不知道(因为它们用的编译器太古老,不会做这些高级的检查)
gfortran也可以开启检查,但是默认不开启。

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

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

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

2

帖子

1

主题

0

精华

新人

F 币
23 元
贡献
11 点
板凳
 楼主| 发表于 2020-4-29 11:02:18 来自移动端 | 只看该作者
kyra 发表于 2020-4-28 19:20
祖传代码这种问题简直太正常了。祖传的人自己都不知道(因为它们用的编译器太古老,不会做这些高级的检查) ...

谢谢谢谢!放宽接口检查就通过了,报错实在是太多,改起来还不如重写了
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-26 08:50

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表