启用或禁用特定条件下的警告, 这些条件可能会产生错误, 例如书写错误或缺少 "全局" 声明.
#Warn WarningType, WarningMode
类型: 字符串
如果省略, 则默认为 All. 否则, 请指定要启用或禁用的警告类型.
VarUnset: 在脚本开始运行之前, 为每个从未以下列任何方式使用的变量的第一个引用显示一个警告:
LocalSameAsGlobal: 在脚本开始运行之前, 为每个名称与全局变量相同但 未声明 的局部变量显示一个警告. 这是为了防止在试图访问全局变量之前, 忘记在函数中声明全局变量而导致的错误. 如果该变量确实是计划作为局部变量来使用, 那么可以使用诸如 local x
或 static y
这样的声明来抑制该警告.
默认情况下, 这个警告是禁用的.
#Warn g := 1 ShowG() { ; 即使从未调用这个函数也会显示警告. ;global g ; <-- 访问全局变量时需要这行. g := 2 } ShowG MsgBox g ; 没有声明, 上面赋值的是局部变量 "g".
Unreachable: 在脚本开始运行之前, 对紧跟在同一嵌套层的 Return
, Break
, Continue
, Throw
或 Goto
之后的每一行发出警告, 除非该行是一个标签的目标. 任何这样的行都不会被执行.
如果代码的目的是不可到达的 - 例如, 如果使用 return
暂时禁用一个代码块, 或者通过注释的方式暂时禁用热键或热字符串 - 可以考虑把不可到达的代码也注释掉. 另外, 也可以通过在第一行不可到达的代码上方定义一个标签来抑制警告.
All: 将给定的 WarningMode 应用于所有支持的警告类型.
类型: 字符串
如果省略, 则默认为 MsgBox. 否则, 请指定指示如何传递警告的值.
MsgBox: 显示一个描述警告的消息框. 请注意, 一旦消息框被删除, 脚本将照常继续.
StdOut: 将警告的描述发送到 stdout(程序的标准输出流), 以及文件名和行号. 这允许像 SciTE 这样的高级编辑器在不中断脚本的情况下捕获警告 - 用户可以在以后通过编辑器的输出窗格跳转到每个违规行.
OutputDebug: 将警告的描述发送到调试器上显示. 如果调试器不是活动的, 则没有效果. 有关详情, 请参阅 OutputDebug.
Off: 禁用给定 WarningType 的警告.
如果该指令未在脚本中使用过, 所有的警告都是启用的并且使用 MsgBox 模式, 除了 LocalSameAsGlobal, 它是禁用的.
对产生 VarUnset, LocalSameAsGlobal 和 Unreachable 警告的检查是在所有指令被解析后, 但在脚本执行前进行的. 因此, 在脚本中的位置并不重要(而且, 像其他指令一样, #Warn 不能被有条件地执行).
然而, 多个 #Warn 指令的顺序是很重要的: 最后出现的设置给定警告的指令决定了该警告的模式. 因此, 例如, 下面两个语句的综合效果是启用除 LocalSameAsGlobal 以外的所有警告:
#Warn All #Warn LocalSameAsGlobal, Off