固定格式Fortran续行报错:Unrecognized token '&' 问题求助
解决固定格式Fortran在IVF编译器中的续行问题
我完全理解你维护旧Fortran项目的头疼——尤其是编译器更新后,旧代码的续行规则突然不兼容了。针对你遇到的unrecognized token '&' skipped和语法错误,咱们一步步来解决:
一、先搞懂固定格式Fortran的标准续行规则
你现在用的行尾加&是自由格式Fortran的续行方式,但你的代码是固定格式(fixed form),这俩规则完全不同!传统固定格式的续行要求是:
- 起始行的第1-5列可写行号(也可留空),第6列必须是空或0
- 后续续行的第6列必须写非空格/非0的字符(比如
&或者老代码常用的*),行尾不需要加任何符号
把你的代码改成标准固定格式写法应该是这样:
format(//, 10x,'*******************************************',/, &10x,'* DIAGONALS OF THE RESIDUAL COV. MATRIX *',/, &10x,'*******************************************',//, &2x,'MEASUREMENT',7X,' RESIDUAL COVARIANCE', /)
注意:每一行续行的第6列是&(前面留5个空格),行尾没有多余的&,这样IVF就能正确识别了。
二、如果不想改代码,调整IVF编译选项兼容旧写法
既然原代码15年前能正常编译,说明当时的编译器支持非标准的行尾&续行。IVF提供了兼容选项,你可以在编译时加上:
/fixed:明确告诉编译器这是固定格式代码(如果文件后缀是.for/.f,IVF默认会识别,但加上更保险)/assume:old_style_continue:这个是关键!开启后,IVF会识别行尾的&作为固定格式的续行符,完美兼容你现在的代码写法/extend_source:132:如果有些行实在太长,这个选项可以把固定格式的行长度从默认的72列扩展到132列(甚至可设到256),减少续行需求
如果用Visual Studio的项目设置:
- 右键项目 → 属性 → Fortran → 格式 → 设置“源格式”为“固定”
- 转到Fortran → 命令行 → 在“附加选项”里加上
/assume:old_style_continue /extend_source:132
三、排查常见坑点
- 文件后缀问题:如果代码文件后缀是
.f90,IVF会默认当成自由格式处理,这时候即使你用固定格式续行也会报错,记得改成.for/.f,或者用/fixed强制指定格式 - 行长度超限:传统固定格式默认只认前72列,超过的部分会被忽略,导致语法错误,用
/extend_source扩展行长度就能解决 - 续行符规则混用:如果同时用了行尾
&和第6列续行符,会触发语法错误,要保持规则统一
内容的提问来源于stack exchange,提问作者Gavin Chandler
相关产品推荐
相关产品推荐

