You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:02:52