#Warn

启用或禁用特定条件下的警告, 这些条件可能会产生错误, 例如书写错误或缺少 "全局" 声明.

#Warn WarningType, WarningMode

参数

WarningType

类型: 字符串

如果省略, 则默认为 All. 否则, 请指定要启用或禁用的警告类型.

VarUnset: 在脚本开始运行之前, 为每个从未以下列任何方式使用的变量的第一个引用显示一个警告:

LocalSameAsGlobal: 在脚本开始运行之前, 为每个名称与全局变量相同但 未声明 的局部变量显示一个警告. 这是为了防止在试图访问全局变量之前, 忘记在函数中声明全局变量而导致的错误. 如果该变量确实是计划作为局部变量来使用, 那么可以使用诸如 local xstatic y 这样的声明来抑制该警告.

默认情况下, 这个警告是禁用的.

#Warn
g := 1
ShowG() {       ; 即使从未调用这个函数也会显示警告.
    ;global g   ; <-- 访问全局变量时需要这行.
    g := 2
}
ShowG
MsgBox g  ; 没有声明, 上面赋值的是局部变量 "g".

Unreachable: 在脚本开始运行之前, 对紧跟在同一嵌套层的 Return, Break, Continue, ThrowGoto 之后的每一行发出警告, 除非该行是一个标签的目标. 任何这样的行都不会被执行.

如果代码的目的是不可到达的 - 例如, 如果使用 return 暂时禁用一个代码块, 或者通过注释的方式暂时禁用热键或热字符串 - 可以考虑把不可到达的代码也注释掉. 另外, 也可以通过在第一行不可到达的代码上方定义一个标签来抑制警告.

All: 将给定的 WarningMode 应用于所有支持的警告类型.

WarningMode

类型: 字符串

如果省略, 则默认为 MsgBox. 否则, 请指定指示如何传递警告的值.

MsgBox: 显示一个描述警告的消息框. 请注意, 一旦消息框被删除, 脚本将照常继续.

StdOut: 将警告的描述发送到 stdout(程序的标准输出流), 以及文件名和行号. 这允许像 SciTE 这样的高级编辑器在不中断脚本的情况下捕获警告 - 用户可以在以后通过编辑器的输出窗格跳转到每个违规行.

OutputDebug: 将警告的描述发送到调试器上显示. 如果调试器不是活动的, 则没有效果. 有关详情, 请参阅 OutputDebug.

Off: 禁用给定 WarningType 的警告.

备注

如果该指令未在脚本中使用过, 所有的警告都是启用的并且使用 MsgBox 模式, 除了 LocalSameAsGlobal, 它是禁用的.

对产生 VarUnset, LocalSameAsGlobal 和 Unreachable 警告的检查是在所有指令被解析后, 但在脚本执行前进行的. 因此, 在脚本中的位置并不重要(而且, 像其他指令一样, #Warn 不能被有条件地执行).

然而, 多个 #Warn 指令的顺序是很重要的: 最后出现的设置给定警告的指令决定了该警告的模式. 因此, 例如, 下面两个语句的综合效果是启用除 LocalSameAsGlobal 以外的所有警告:

#Warn All
#Warn LocalSameAsGlobal, Off

局部和全局变量

示例

禁用所有警告. 不推荐.

#Warn All, Off

启用每种警告并将它们显示到消息框中.

#Warn

对于每一个与全局变量同名的未声明的局部变量, 向 OutputDebug 发送一个警告.

#Warn UseUnsetLocal, OutputDebug