Fortran 77编译报错#6633:实参与哑参类型不匹配求助
解决Fortran 77编译报错#6633:实参与哑参类型不匹配
问题根源
Fortran 77默认遵循隐式类型规则:首字母为I-N的变量默认是整数类型,其余字母开头的变量默认是实数类型。你的代码里:
- COMMON块中的
A首字母非I-N,默认被识别为实数类型 - 子程序
START3的哑参JAD11首字母J属于I-N范围,默认被识别为整数类型
调用START3(A(KA(LJAD1)))时,实参是实数数组元素,哑参要求整数数组,类型不匹配触发#6633错误。
解决方案
方案1:修正COMMON块中A的类型
如果程序逻辑要求START3接收整数数组,在定义COMMON /VARDIM/的代码块前,显式声明A为整数类型:
INTEGER A COMMON /VARDIM/ A(8000000) VSO 220
方案2:修正子程序START3的哑参类型
如果A确实应该是实数类型,在START3中显式声明JAD11为实数类型,放在DIMENSION语句之前:
SUBROUTINE START3(JAD11) RT3 10 REAL JAD11 DIMENSION JAD11(JD11) RT3 410 ...... RETURN RT3 1150 END RT3 1160
额外检查点
- 确认
KA(LJAD1)的返回值类型:KA作为函数,其返回值应是整数类型(用于数组索引),如果KA未显式声明,也要检查它的隐式类型是否正确。 - 建议在所有程序单元开头添加
IMPLICIT NONE(虽然Fortran77不强制,但能避免隐式类型带来的后续问题,不过要注意需要显式声明所有变量)。
内容的提问来源于stack exchange,提问作者user21171442
相关产品推荐
相关产品推荐

