我收到此警告:WARNING: $a possibly used before declaration.
表示我的功能:
Func test()
If (IsDeclared("a")) Then
ConsoleWrite($a)
Else
ConsoleWrite("Not declared")
EndIf
EndFunc
Global $a = "test"
test()
可以通过使用全局变量作为函数的参数来避免。但是我需要这个结构,因为它与文件操作有关,我不想在每次需要变量时执行它。
如何在不生成“可能在声明之前使用”-error?
的情况下执行此操作答案 0 :(得分:1)
首先,此警告由Au3Check.exe报告,该程序与AutoIt编译器本身分开。您会发现在打印此警告后您的程序仍将编译/运行。一种可能的解决方案是忽略它,或者不在代码上运行Au3Check(不推荐)。
如果您最后定义了函数,那么您的代码将正常工作。你可能已经意识到了这一点,我知道当你#include
职能时,他们可能会处于最顶层。
另一种可能的解决方案,如果真的很烦人,就是使用Eval
。我不建议这样做,因为它不需要,如果使用Au3Stripper(以前是混淆器)会破坏你的脚本,尽管你的代码已经被IsDeclared
打破了。
您可能不会想到的解决方案(可能是最佳解决方案)就是使用Dim
。
Func test()
If(IsDeclared("a")) Then
Dim $a
ConsoleWrite($a & @LF)
Else
ConsoleWrite("Not declared" & @LF)
EndIf
EndFunc
Global $a = "test"
test()
基本上,Dim
的行为类似于Local
,除非在全局范围内已存在具有该名称的变量,在这种情况下它将被重用。
答案 1 :(得分:0)
我收到此警告:
WARNING: $a possibly used before declaration.
AU3Check确定在声明之前访问的变量(按代码顺序)。在变量声明之前,它不知道包含函数没有被称为,因此会产生警告(而不是报告错误)。
在声明全局变量之后声明关于函数的访问是否会阻止AU3Check的警告。例如:
#AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
Global $a = "test"
test()
Func test()
If (IsDeclared("a")) Then
ConsoleWrite($a)
Else
ConsoleWrite("Not declared")
EndIf
EndFunc