Fortran常见编译错误 compile error
2017-03-26 21:48阅读:
在编译时常出现以下错误:
摘录
Q0001:
【CVF】Severe:
Invalid argument , Error executing df.exe
编译错误提示类似于:f90: Severe: Invalid argument ... file is
'C:\?D??\fcode.f90' Error executing df.exe
原因:这是由于 Compaq Visual Fortran
不支持中文路径下的源代码文件。源代码文件名作为参数(argument
)传递给编译器(df.exe )被认为是非法的(Invalid 因为含有中文)。
解决:将源代码文件放入英文路径下重新编译。
Q0002:
【CVF / IVF
】Error spawning
df.exe 或 The
Fortran compiler (ifort.exe) c
annot be found.
原因:这多半是由于编译器安装不合适造成的,或者安装时未设置合理的环境变量。执行
编译器( df.exe 或 ifort.exe ) 失败或根本找不到。
解决:重新安装编译器(win7/win8 下请不要使用 CVF
),注意安装时如选择是否设置环境变量,选 Yes。
Q0003:
【CVF / IVF
】Unrecognized token '?'
skipped
原因:代码中出现了编译器无法识别的字符。
解决:首先检查自己的源代码文件是否为 ANSI 编码,而不是
Unicode
编码或其他。然后检查错误行,是否存在特殊字符?包括除字符串常量和注释行之外的中文。尤其注意括号,逗号,冒号是否是半角?
Q0004:
【CVF / IVF
】Syntax error
原因:语法错误
解决:语法错误的可能性很多,但凡违反语法规定的写法,都可能出这个错误。认真检查错误行,某些编译器可能会给出更详细的错误提示,翻译一下会更便于查找错误。
Q0005:
【CVF / IVF
】Unbalanced parentheses
原因:括号不成对出现,例如 a(3))
解决:检查错误行的括号,确保成对出现。
Q0006:
【CVF / IVF
】An unterminated block
exists.
原因:If 或 Do 等区块没有结束。
解决:检查 If 是否有 EndIf
对应,Do 是否有 End Do 对应
Q0007:
【CVF / IVF
】A specification statement
cannot appear in the executable section.
原因:声明语句出现在了执行语句中
解决:所有声明语句必须在所有执行语句前面,即先声明所有变量,然后才有执行语句。
调整这些语句的顺序既可。
Q0008:
【CVF / IVF
】The type of the actual
argument differs from the type of the dummy argument.
[SOME].
原因:SOME 作为实参,它的的类型与对应的虚参不一致
解决:我们建议所有实参与对应的虚参具有相同的类型,精度,大小和数组上下限。检查
一下被提示的变量,其类型精度是否与虚参一致?尤其是没有使用 Implicit None
的程序单
元,默认 IN 规则情况下,容易发生类型不一致。
Q0009:
【CVF / IVF
】Cannot open include file
'文件名.inc'
原因:文件名.inc 做为被包含文件,无法打开
解决:
1.检查是否存在 文件名.inc ;
2.检查 文件名.inc 是否在你的工程目录(文件夹);
3.检查该文件是否被隐藏了扩展名,有时候我们看起来是 文件名.inc
,其实是 文件
名.inc.txt ,我建议取消隐藏扩展名设置。方法是
打开我的电脑,工具,文件夹选项,查看,
取消“隐藏已知文件扩展名” ;
4.检查该文件是否是 ANSI
编码,用记事本打开,文件另存为时既可查看编码,请确保是 ANSI 的,而不是 unicode
,utf-8 等;
Q0010:
【CVF / IVF
】Recommended relationship
between field width 'W' and the number of fractional digits 'D' in
this edit descriptor is 'W>=D+3'
原因:浮点数格式输出符中,W < D+3。
解决:由于浮点数输出时,需输出至少一位整数,一个小数点,(可能的)一个负号。所以,建议宽度
W 大于小数点后的 D + 3。比如 3.1415
,格式为 F6.4 ,6 只比 4 大
2 ,
如果遇到负数,就会无法输出负号。造成 ****** 出现。
注意,这只是一个警告,如果你确定不会有负数,则可以无需干涉。
同理,对于科学计数法,会有 W>=D+7
的要求。比如3.1415E+35 ,格式为 ES10.4
,10 只比4 大 6 ,遇到负号无法输出。
Q0011:
【CVF / IVF
】 The
statement label ?? is referenced but not defined in this
scope.
原因:某语句标号的语句被使用了,但没有定义。比如 goto 100
,但没有 100 这句标号的
语句。
解决:补齐语句标号语句,或者取消对该标号语句的使用。