如何解决Fortran编译错误:‘Two main PROGRAMs’及函数定义错误
Fortran程序问题分析及修正方案
1. 函数声明语法错误
第二个编译错误的直接原因是函数定义时误用了::。Fortran中函数声明的正确格式是REAL(8) FUNCTION solub(T),::仅用于分隔变量类型与变量名,函数声明里不需要该符号,因此编译器报错"Invalid character in name"。
2. 主程序未识别外部函数,导致编译器误判多主程序
第一个错误的核心问题:
- 你在主程序中将
solub声明为REAL(8)类型的变量,但它实际是一个函数,编译器无法识别其函数属性。主程序结束后,后续的函数代码被当作独立程序单元,加上函数内的IMPLICIT NONE语句,被编译器误判定为第二个主程序的起始,因此报"Two main PROGRAMs"。 - 解决方式:在主程序的变量声明段添加
EXTERNAL solub语句,明确solub是外部函数,同时删除原声明solub为变量的代码行。
补充隐藏问题
函数定义中未显式声明参数T的类型,由于函数内启用了IMPLICIT NONE,编译时会触发T未定义的错误,需在函数内补充REAL(8) :: T的声明。
修正后的完整代码
PROGRAM sco2 IMPLICIT NONE REAL(8) :: verif EXTERNAL solub ! 声明solub为外部函数 WRITE (*,*) "ENTER A TEMPERATURE" READ (*,*) verif WRITE (*,*) solub(verif) END PROGRAM sco2 REAL(8) FUNCTION solub(T) IMPLICIT NONE REAL(8) :: T, A1, A2, A3 ! 显式声明参数T及内部变量 A1 = -60.2409 A2 = 93.4517 A3 = 23.3585 solub = exp(A1 + A2 * (100/T) + A3 * log(T/100)) END FUNCTION solub
内容的提问来源于stack exchange,提问作者Lea
相关产品推荐
相关产品推荐

