IBM—PC FORTRAN编译与运行出错信息 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 一、编译出错信息 IBM—PC FORTRAN的编译出错信息有两种形式。一种是直接给出出错信息没有指出具体行号的,其出错信息的形式是:?ERROR:出错信息。另一种是给出出错代码同时指出行号的,其出错信息的形式是:**** ERROR出错代码,LINE行号。前者是编译时遇到的少数错误,对这类错误找出确切的出错位置会稍微困难一些,因为没有指出行号。编译时遇到的错误大多数是后者,这类错误因为指出了具体的行号,容易找到错误的地方。为了便于知道这类错误的性质,本附录给出每个出错代码所对应的错误性质,以便查阅。 错误代码 错误性质 1 读源程序块的致命性错误。 2 非数字字符在标号域里。 3 继续行太多。对每个起始行的续行不得超过9行。 4 没有找到文件正确的结束端。在读源文件时遇到了意外的文件结束。例如:END语句漏掉,在END之后有额外的行。 5 在$编译元命令上丢失了字段。 6 在$编译元命令上丢失了字段。 7 不能打开文件。 8 不认识的元命令。 9 输入格式无效。 10 超出包含文件的最大嵌套层次。 11 整常数溢出 12 实常数错误。实常数的表达式不正确。 13 实常数的位数太多。 14 标识符太长。 15 字符常数没有括起来。例如,缺撇号,字符常数超过了72列。 16 字符常数的长度为零。字符常数的长度为零是不允许的。 17 输入了无效的字符。字符串或字符常数之外的字符是不可接受的。 18 要求整常数。 19 缺少标号。 20 标号错误。 21 要求有类型说明,例如:在IMPLICIT语句中。 22 要求是整常数 23 在语句的结尾有额外的字符。在所予期的行结束之后遇到字符。 24 缺少“(”。 25 在IMPLICIT语句中字母已经用过了。 26 缺少“)"。 27 缺少字母。 28 缺少标识符。 29 缺少维数的定义。 30 数组已定义维数。 31 维数太多。 32 不相容的变量。 33 标识符已经有类型。 34 标识符已经被说明。 35 内部函数不允许在这里使用。这个内部函数不允许作为变量。 36 标识符必须是一个变量。 37 标识符必须是一个变量或者是当前的函数。 38 缺少“/”。 39 有名公用块已经保存。 40 变量已经在COMMON语句中出现过。 41 变量出现在两个不同的公用块中。 42 下标的个数与说明冲突。 43 下标越界。 44 公用块中各变量定位矛盾。一个名字不能有多个对它的调用。 45 迫使存储单元向相反方向延伸。EQUIVALENCE语句在反方向扩展公用块。 46 安排存储单元冲突。 47 缺少语句标号 48 字符型的项和数字项在同一公用块中。 49 字符型的项和非字符的项冲突。 50 在表达式中出现无效的符号。 51 表达式中出现了SUBROUTINE名。 52 参数类型必须是INTEGER(整型)或REAL(实型)。 53 参数类型必须是INTEGER(整型)、REAL(实型)。或CHARACTER(字符型)。 54 类型不一致。 55 表达式类型必须是逻辑的。 56 下标太多。 57 下标太少。 58 要求是变量。 59 缺少“=”。 60 字符项的大小必须一致。 61 赋值类型不匹配。 62 缺少SUBROUTINE名。 63 不允许虚参。不允许在COMMON语句中有虚参。 64 不允许虚参数。不允许在EQUIVALENCE语句中出现虚参。 65 假定大小的说明只是对于虚数组。 66 可调大小的说明只是对于虚数组。 67 假定大小必须是最后一维。 68 可调数组的维界必须是参数,或者在公用块中。 69 可调数组的维界必须是简单的整型变量。 70 有多个主程序。 71 有名公用块的大小必须一致。 72 不允许虚参。 73 不允许公用块变量。不允许公用块变量在DATA语句中。 74 不允许SUBROUTINE,FUNCTION或INTRINSIC名。 75 下标超过范围。 76 重复计数必须大于等于1。 77 要求常数。 78 类型冲突。 79 变量的数目不匹配。 80 不允许标号。 81 没有这样的内部函数。 82 内部函数类型冲突。 83 要求是字母。 84 函数类型与前面的调用冲突。 85 SUBROUTINE或FUNCTION早已被定义。 87 自变量类型冲突。 88 子例行子程序或函数子程序与先前的使用冲突。 89 不认识的语句。 90 不允许字符函数。 91 漏掉END语句。 93 在调用时,实参少于虚参。 94 在调用时,实参多于虚参。 95 变量类型冲突。 96 子例行子程序或函数子程序没有被定义。 98 字符的大小无效。 100 语句次序。语句次序混乱。 101 不认识的语句。 102 跳进不允许进入的程序块。如:不允许转进IF、ELSEIF或ELSE块。没有$DO66元命令的指定,不允许控制转进DO块。 103 标号已为FORMAT语句所用。 104 标号已被定义。 105 不允许控制转到FORMAT语句。 106 这里不允许使用DO语句。 107 DO语句必须跟有标号。 108 这里不允许END IF语句。 109 IF语句不匹配。 110 在IF块中不正确地嵌套了DO块。 111 这里不允许使用ELSE IF语句。 112 IF语句不匹配。 113 不正确地嵌套了DO块或ELSE块。 114 缺少“)”。 115 缺少“(”。 116 缺少THEN。 117 要用逻辑表达式。 118 这里不允许ELSE。 119 IF语句不匹配。 120 这里不允许GOTO语句。 121 这里不允许GOTO语句。 122 这里不允许块IF语句。 123 这里不允许逻辑IF语句。 124 这里不允许算术IF语句。 125 缺少“,” 126 错误类型的表达式。 127 这里不允许RETURN语句。 128 这里不允许STOP语句。 129 这里不允许END语句。 131 标号没有定义。 132 DO块或IF块没有终结。 133 这里不允许FORMAT语句。 134 FORMAT标号早已被引用。 135 FORMAT标号漏掉。 136 缺少标识符。 137 要求用整变量。 138 缺少TO。 139 要求用整表达式。 140 缺少ASSIGN语句。 141 不认识的字符常数。 142 要求用字符常数。 143 要求用整表达式。 144 要求用STATUS选择。 145 不允许字符表达式。错误类型的表达式。要求正确的字符表达式。 146 缺少FILE=的选择项。 147 RECL-早已被定义。 148 要求用整表达式。 149 不认识的选择。 150 缺少RECL=选择项。 151 这里不允许可调数组。不允许可调数组作为I/O表元素。 152 在隐DO表中遇到语句结束,用“(”开始的表达式不允许作为I/O表元素。 153 要求变量作为隐DO循环控制。 154 在I/O表里不允许表达式。在READ语句的I/0表里不允许表达式。 155 选择项REC一早已定义。 157 这里不允许END= 158 END=早已定义。 159 不认识的I/O通道号。 160 在I/O中有不认识的格式。 161 在“,”后要求使用有选择项。 162 不认识的I/O表元素。 163 FORMAT没有找到。 164 丢掉ASSIGN。 165 标号已经用于FORMAT语句。 166 缺少整型变量。 167 作为,FORMAT的标号多次定义。 203 不允许字符函数。 406 零号部件必须是格式的和顺序的。 407 ERR一早已定义。 408 标号太多。在算术IF语句中指定的标号太多。 409 对于这种类型,长度无效。 410 要求有PRECISION说明。 411 整数类型冲突。 415 数组定维太大。 420 不合理的函数调用。 421 不合理的内部函数。对于类型转换,字母顺序关系,选取最大值或最小值的内部函数名不得被用作实参。 501 不认识的字符。 502 在元命令中不允许空白。 503 这里不允许元命令。 504 长度大小早已被定义。 601 超出范围 701 缺少字符类型。 703 内部错误。 705 内部错误。 706 内部错误。 708 内部错误。 709 错误的字符类型。 710 内部错误。 711 内部错误。 713 长整数转换错误。 714 不能转换成单精度。 715 不能转换为双精度。 717 内部错,类型语句的编译问题。 718 内部错,DO语句的编译问题。 802 不合理的弧度。 803 起始定位是奇数。 804 实常数溢出。 805 整常数太大。’ 806 漏掉了实参。 807 变量太大。 808 数据长度超过了最大限度。 809 此处应该用数字。 810 应该用数字或字符型。 811 赋予DO引导变量。 812 公用区超过最大长度。 813 数组定维错误,上界小于下界。 814 不允许零作为循环步长。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 二、运行出错信息 运行时的错误分为文件系统错误和非文件系统错误两类。 ━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.文件系统错误的信息 文件系统错误代号范围是1000~1299,其出错信息的形式是: 错误代号 错误类型 ERROR IN FILE 文件名 其中错误类型是下列各之一: 操作 Operation 文件名 Filename 设备满 Device Full 文件没有找到 File not found 文件没有打开 File not open 数据格式 Data Format 行太长 Line too long 以下给出各出错代号相应的错误性质,以便查阅: 错误代号 错误性质 1000 当写文件结束时写错误。 1002 文件扩展名多于三个字符。 1003 产生新文件时的错误(盘或目录满)。 1004 在打开一个存在的文件时发生错误(文件没有找到)。 1005 文件名是零个字符或多于8个字符。 1007 文件名总长超过21个字符。 1008 当进到下一个记录时写错。 1009 文件太大(超过65535个逻辑段)。 1010 当对直接记录进行寻找时写错。 1011 试图在一个非盘设备上打开一个随机文件。 1012 在一个非盘设备上前跳或后退。 1013 在前跳或后退空间时,盘或目录满。 1023 运算错误。 1027 文件名错误。 1028 设备满错。 1031 不合理的功能号。 1032 文件没找到。 1033 通道号没找到。 1034 同时打开的文件太多。 1035 拒绝存取。 1036 无意义的运转(文件没打开)。 1037 内存控制板已被破坏。 1038 内存空间不够。 1039 内存存储块地址不合理。 1040 环境不合理。 1041 格式不合理。 1042 不合理的存取代码。 1043 不合理的地址。 1045 指定了不合理的驱动器。 1046 企图去掉当前目录。 1047 不是同一个设备。 1048 不再有文件。 1200 在FORMAT语句中漏掉了“)”。 1201 在输入中有错误的符号。 1202 输入的正、负符号之后没有跟着数字。 1203 在输入中缺少数字。 1204 在格式中,B后面丢掉了N或Z。 1205 在格式中,出现意外的字符。 1206 在格式中,不允许重复因子为零。 1207 对于格式里的W字段中缺少整数。 1208 对于格式里的W字段,要求正整数。 1209 在格式里缺少“·”。 1210 对于格式里的d字段要求用整数。 1211 对于格式里的e字段要求用整数。 1212 对于格式里的e字段,要求用正整数。 1213 对于A格式里的W字段,要求用正整数。 1214 对于输入,在格式中不得出现Hollorith字段。 1215 在格式中的Hollerith字段要求重复因子。 1216 在格式中的X字段要有重复因子。 1217 在格式中的P字段要有重复因子。 1218 在格式中+或一之前出现整数。 1219 在格式中+或一之后,要求是整数。 1220 在格式中重复因子之后,要求用P格式。 1221 要求格式的最大嵌套级。 1222 在格式中“)”有重复因子。 1223 在格式中,整数之后跟着“,”不合法。 1224 “·”是不合法的格式控制字符。 1225 对于输入,在格式中不得出现字符常数。 1226 在格式中,字符常数不得重复。 1227 在格式中,“/”不得重复。 1228 在格式中,“?”不得重复。 1229 BN或BZ格式控制不得重复。 1230 企图在未知的通道号上执行I/O,例如OPEN语句漏掉,或者从来没有被执行。 1231 在作为无格式打开的文件上企图进行格式I/O。 1232 格式中应以“(”开始。 1233 对于整数输入,要用I格式。 1234 对于实数输入,应使用F或E格式。 1235 在实数格式输入里,有两个“·”。 1236 在实数格式输入里,要输入数字。 1237 对于逻辑型输入,要求用L格式。 1238 空的逻辑字段。 1239 在逻辑型输入里,应使用T和F格式。 1240 对于字符型输入,应使用A格式。 1241 对于整数输出,应使用I格式。 1242 在F格式里,W字段不大于d字段+10 1243 在E格式里,比例因子超出了d字段的范围。 1244 对于实数输出,要用E或F格式。 1245 对于逻辑输出,要求使用L格式。 1246 对于字符型输出,要求使用A格式。 1247 企图对有格式的I/O打开通道,进行无格式的I/O操作。 1251 在输入时,整数溢出。 1252 没有足够的输入来满足I/O表或格式,例如,指定一个I/O格式,而只输入5个字符。 1253 太多的字节写到直接存取设备的记录上。 1255 企图在一个设备的超过文件结束的记录上进行外部的I/O· 1257 企图对一个作为顺序打开的设备做直接存取。 1258 不可能寻找文件的位置。 1260 企图后退连到打印机或键盘或显示的设备。 1262 企图对内部设备做无格式I/O。 1265 企图放一个以上的记录到内部部件。 1266 企图写比内部部件的长度要多的字符到它上面。 1267 在未知设备上调用EOF。 1268 超过动态文件分配的限制。 1270 屏幕I/O错。 1271 在打印机或键盘或显示上调用EOF函数。 1272 在前次操作上遇到错误以后还企图进行文件操作。 1273 键盘缓冲器溢出:太多的字节写到键盘输入记录上(必须少于132)。 1274 在读长整数时的错误。指定$STORAGE:2,将引起多个指定的错误出现。 1275 在写长整数时的错误。指定$STORAGE:2,将引起多个指定的错误出现。 1281 重复字段不是整数。 1282 有多个重复字符。 1283 在直接输入清单中,有不合理的数据。 1284 直接数字项清单超过了记录长度。 1285 在直接输入的清单中,有不合理的字符串。 1297 整变量的当前值没有被赋予一个格式标号。 1298 在用不带END=选择的读语句时,遇到文件结束标志。 1299 在赋值GOTO语句中用的整变量没有被赋予一个标号。 ━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.另外的运行时错误 非文件系统的错误代g-从2000到2999。各种错误列表如下: (1)2000~2049内存错误。堆(heap)是IBM FORTRAN系统用来安排动态存储的存储区。因为栈和堆互相对着增长。这些错误都是相互有关的,例如,一个栈溢出可以引起一个“堆是无效的”错误。 2000 溢出。当调用一个过程或者函数时,栈超出存储区(即堆栈缺少存储空间)。 2001 在堆里没有空间。当企图得到动态存储时,在堆里找不到足够的空间给一个新变量。堆死锁此错误总是能发现的。 2002 堆是无效的。当企图得到动态存储时,分配算法发现堆的结构是错误的。堆阵死锁此错误总是能被发现的。 (2)2050-2099整数计算。 2052 被零除。整型值被零除;例如有$DEBUG,则检查。 2054 符号运算溢出。整型结果超过最大数范围;假如有$DEBUG。将进行检查。 2084 整数零的负幂,总是检查的。 (3)2100-2149实型计算。 2100 实型数被零除。实型值被零除,总是检查的。 2101 实型数运算溢出。对表达式的实型数值太大,总是检查的。 2102 SIN或COS变量范围。SIN函数或COS函数的变量不合适,结果太大,无法得到有意义的结果。 2103 EXP变量范围。EXP内的变量太大。不适合于表达式9 2104 SQRT的变量为负。对于小于零的变量求平方根;总是能发现此错误的。 2105 自然对数的变量非正。对于小于或等于零的变量求自然对数;总是能发现此错误的。 2016 截断或舍入时,变量的范围。实数转换成整数时,超出整数的范围。总是能发现此错误的。 2131 正切函数的变量太小。正切函数的变量太小,使得结果无效净总是能发现此错误的。 2132 实型的反正弦或反余弦的变量大于1。总是能发现此错误的。 2133 负实数的实数幂。企图产生一个负实数的实幂,总是能发现此错误的。 2134 实数零的负幂;总是检查的。 2135 实数运算下溢。 2136 实数不定(未初始化或原来错)。 2137 没有协处理器把程序同运行库连接起来并打算使用8087协处理器,但协处理并未装入系统。应将程序用EMULATOR库或REGMATH库重新链接。 2138 检查出IEEE不正常。产生了一个非常小的实数并且失去有效值而不再有意义。 2139 实数精度丢失。在8087处理器上的算术运算的结果丢失了数字精度。 2140 实数算术处理指令非法或没被仿真。企图执行一非法算术处理指令或浮点不能仿真一个合法的处理指令。 (4)2200-2249长整数计算 2200 长整数被零除除;总是检查的。 2201 长整数数学溢出;总是检查的。 2234 长整数零的负幂;总是检查的。 (5)2250-2999其它的错误 2451赋值GO TO的标号不在清单中。这个错误只是在设置$DEBUG时出现。