Fortran编译报错:Symbol 'iac'无IMPLICIT类型排查
报错触发原因
- 对Fortran语法规则存在理解偏差:代码开启
IMPLICIT NONE强制显式类型声明后,DIMENSION语句仅用于定义数组的维度属性,不能替代类型声明语句为变量指定类型。 - 代码中
INTEGER I, LI行仅声明了I、LI两个整型变量,后续DIMENSION语句里列出的IAC、IDE、INC等所有数组均未被显式指定类型,编译器扫描到IAC时判定其无有效类型,因此抛出错误。提示信息里的did you mean 'nac'是编译器的自动拼写猜测,NAC是代码开头声明的长度为70的字符型变量,和目标整型数组IAC是完全独立的两个变量(Fortran不区分标识符大小写,命名差异和大小写无关)。 - 代码存在同类隐患:末尾
DATA语句中赋值的NDI、NOE、NDN、NDE、NODEL五个变量同样未做类型声明,修正IAC问题后会继续触发同类型报错。
对应解决方法
- 最简洁的修正方式是直接将所有整型数组、未声明的整型变量合并到
INTEGER类型声明行,删除冗余的单独DIMENSION语句,修改后的整型声明段参考如下:
INTEGER I, LI, IAC(4000), IDE(2,500), INC(2000), LISEX(400), LTY(1000), & LPOIN(2000), MBEL(500), MPRI(1000), NDON(5,50), NIST(5000), & NLOD(10), NMAS(5000), NNEL(1000), NPRI(1000), NTY(1000), & NDI, NOE, NDN, NDE, NODEL
- 如果要保留
DIMENSION语句的书写习惯,必须在DIMENSION语句前先声明所有涉及变量的类型,即先在INTEGER行列出IAC、IDE等所有数组和NDI等变量,再通过DIMENSION指定各数组维度,该写法冗余度较高,不推荐使用。 - 全局检索代码中
IAC和NAC的使用位置,确认不存在拼写混淆,避免后续出现逻辑错误。
内容的提问来源于stack exchange,提问作者Farraz
相关产品推荐
相关产品推荐

