谁能解释一下#forcedef 和#forceref 指令的作用?【已解决】
本帖最后由 xiehuahere 于 2011-12-8 09:48 编辑从字面上理解,分别就是“强制定义”和“强制引用”的意思。但不理解什么情况下需要使用。
从帮助中的例子看,在WM_COMMAND, WM_NOTIFY消息处理函数中基本都使用了 #forceref 。
而 #forcedef 还没有看到具体使用的例子。
请各位大神赐教。 在哪里看到的? 回复 2# gto250
ACN帮助里搜索 forceref,能出来一大堆。
就看看 GUIRegisterMsg 函数附带的例子吧。
元老,解释一下? 回复 3# xiehuahere
官方有个例子.
http://www.autoitscript.com/forum/topic/93732-forceref-answered/
有这个#forceref,但是没有#forcedef(可能是以前的版本用的吧?)
#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -v 3
Global $a
Func Test($x)
Local $y
Return
EndFunc
运行上面的代码出错.
WARNING: $x: 已声明,但未在函数中使用.
Func Test($x).
WARNING: $y: 已声明,但未在函数中使用.
Local $y
再运行下面的代码就不出错.
#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -v 3
Global $a
#forceref $a,Test
Func Test($x)
Local $y
#forceref $x,$y
Return
EndFunc
Au3Check的有效参数:
-q : 静默 (只当错误/警告时显示)
-d : 使用 Opt("MustDeclareVars", 1) 必须声明变量
-I dir : 添加一个目录用来搜索 include 文件
-U -|file : 输出引用的UDF和全局变量
-w 1 : 已经包含文件 (开)
-w 2 : 丢失 #comments-end (开)
-w 3 : 已经声明变量 (关)
-w 4 : local (局部)变量使用于了 global (全局)空间 (关)
-w 5 : 局部变量已经声明当没有使用 (关)
-w 6 : 使用 Dim 时的警告(关)
-v 1 : 显示包含文件的路径/文件(关)
-v 2 : 显示 lexer tokens (关)
可能是编译时候Au3Check用了“-w 3” 这个参数时出不出警告吧.
可以检查无意义的代码(我是这么想的,具体说不清). 本帖最后由 xiehuahere 于 2011-12-8 09:04 编辑
高人。。。
谢谢,学习了!
看来确实跟 AU3Check 的语法检查相关。
可以理解一点,就是使用#forceref 可避免“已申明但未使用的变量(包括函数参数)”这种警告信息。
#forcedef 既然没看到实例和具体说明,暂且放过它。 回复 5# xiehuahere
又找到了例子.
#forcedef 这个好像只支持AutoIt v3.3.7.0以上的版本.
http://www.autoitscript.com/forum/topic/128892-autoit-v3370-beta-released/
而是只对Assign()函数有用.
先运行这个试试.
Assign("test", 12)
ConsoleWrite($test & @LF)
WARNING: $test: 使用前并未进行声明.
ConsoleWrite($test &
错误: $test: 未声明的全局变量.
ConsoleWrite($test &
再试试这个.
#forcedef $test
Assign("test", 12)
ConsoleWrite($test & @LF)
不用声明也可以运行(也可以编译)了.
http://www.autoitscript.com/forum/topic/130648-assign-compile-error-for-variables-created/page__p__909032#forcedef&fromsearch=1&#entry909032
这里有人说【只适用于当前的Beta】. 回复 6# lixiaolong
多谢!
都被你找齐了,呵呵~~ 回复 7# xiehuahere
我对有兴趣的事非要弄明白不可,这是我的习惯,不客气~{:face (427):}
页:
[1]