找回密码
 加入
搜索
查看: 3077|回复: 7

[AU3基础] 谁能解释一下#forcedef 和#forceref 指令的作用?【已解决】

  [复制链接]
发表于 2011-12-4 20:50:01 | 显示全部楼层 |阅读模式
本帖最后由 xiehuahere 于 2011-12-8 09:48 编辑

从字面上理解,分别就是“强制定义”和“强制引用”的意思。但不理解什么情况下需要使用。

从帮助中的例子看,在WM_COMMAND, WM_NOTIFY消息处理函数中基本都使用了 #forceref 。
而 #forcedef 还没有看到具体使用的例子。

请各位大神赐教。
发表于 2011-12-5 18:22:50 | 显示全部楼层
在哪里看到的?
 楼主| 发表于 2011-12-6 13:17:08 | 显示全部楼层
回复 2# gto250


    ACN帮助里搜索 forceref,能出来一大堆。
   就看看 GUIRegisterMsg 函数附带的例子吧。
   元老,解释一下?
发表于 2011-12-7 21:42:46 | 显示全部楼层
回复 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” 这个参数时出不出警告吧.
可以检查无意义的代码(我是这么想的,具体说不清).

评分

参与人数 2金钱 +40 贡献 +2 收起 理由
xiehuahere + 20 + 2
afan + 20

查看全部评分

 楼主| 发表于 2011-12-8 09:01:27 | 显示全部楼层
本帖最后由 xiehuahere 于 2011-12-8 09:04 编辑

高人。。。
谢谢,学习了!

看来确实跟 AU3Check 的语法检查相关。
可以理解一点,就是使用#forceref 可避免“已申明但未使用的变量(包括函数参数)”这种警告信息。
#forcedef 既然没看到实例和具体说明,暂且放过它。
发表于 2011-12-8 09:38:22 | 显示全部楼层
回复 5# xiehuahere

又找到了例子.

#forcedef 这个好像只支持AutoIt v3.3.7.0以上的版本.
http://www.autoitscript.com/foru ... 3370-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/foru ... =1&#entry909032
这里有人说【只适用于当前的Beta】.

评分

参与人数 1金钱 +10 收起 理由
xiehuahere + 10 搜索能力很强,神通!

查看全部评分

 楼主| 发表于 2011-12-8 09:47:39 | 显示全部楼层
回复 6# lixiaolong


    多谢!
   都被你找齐了,呵呵~~
发表于 2011-12-8 09:59:39 | 显示全部楼层
回复 7# xiehuahere

我对有兴趣的事非要弄明白不可,这是我的习惯,不客气~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 12:43 , Processed in 0.082223 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表