处理运行时错误。
FreeBASIC可以通过以下方式处理错误:
- 默认情况下,程序不会对错误执行任何操作 - 它们会被忽略并且代码继续。在这种情况下,代码应该使用Err函数处理下一行中的可能错误。
- 如果使用-e 或-ex 选项编译,FreeBASIC使用类似QB的错误处理。
- 未来FreeBASIC的OOP版本可能有一个类似java的TRY..CATCH ... FINALLY异常处理程序。
注意:以下信息有效,除非该错误产生OS常规保护故障(例如,如果程序在进程内存区域外写入)。在这些情况下,操作系统将立即停止程序并发出错误:没有什么可以从FreeBASIC内部避免。
默认错误处理
默认的FreeBASIC行为是设置ERR变量并继续。
Dim As Integer e
Open "xzxwz.zwz" For Input As #1
e = Err
Print e
Sleep
(示例程序假设没有
xzxwz.zwz文件)。程序不停;它设置ERR变量并继续。可以在下一行处理错误。
一些IO功能,如
Open和
Put #...可以以函数形式使用,如果成功则返回错误号或为零。
Print Open ("xzxwz.zwz" For Input As #1)
Sleep
QuickBASIC类错误处理
如果在编译时使用
-e 或
-ex 开关,那么该程序应该启用类似QB的错误处理程序。如果没有处理程序处理错误,程序将停止并出现错误。
注意:如果使用QB-Like错误处理,程序员应准备好处理所有错误条件。
'' Compile with QB (-lang qb) dialect
'$lang: "qb"
On Error Goto FAILED
Open "xzxwz.zwz" For Input As #1
On Error Goto 0
Sleep
End
FAILED:
Dim e As Integer
e = Err
Print e
Sleep
End
On Error设置错误处理例程,程序将在发现错误时跳转。
On Error Goto 0禁用错误处理。
如果错误发生时未设置错误处理程序,程序将停止并发送控制台错误消息。
Aborting program due to runtime error 2 (file not found)
错误处理程序例程可以在程序的结尾,如QB中所示。
On Local Error语句允许在发生错误的相同
Sub或
Function的末尾设置本地错误处理程序。
'' Compile with -e
'' The -e command line option is needed to enable error handling.
Declare Sub foo
foo
Sleep
Sub foo
Dim filename As String
Dim errmsg As String
filename = ""
On Local Error Goto fail
Open filename For Input Access Read As #1
Print "No error"
On Local Error Goto 0
Exit Sub
fail:
errmsg = "Error " & Err & _
" in function " & *Erfn & _
" on line " & Erl
Print errmsg
End Sub
如果使用
-e 开关(不管
-lang 方言),错误处理程序必须终止程序。
仅使用
-ex 和
-lang qb 方言,错误例程可以通过使用
Resume(重试导致错误的语句)或
Resume Next(继续在下一条指令)结束。
错误代码
有关运行时错误号及其相关含义的列表,请参阅
运行时错误代码.
没有定义用户错误代码范围。如果
Error用于设置错误代码,那么使用高值避免与内置错误代码列表的冲突是明智之举。(此内置列表可能会稍后扩展。)
参考