itljl 发表于 2010-8-18 01:04:21

变量未申明,这算BUG吗?

建一 2.au3
内容为

Func _msg()
        MsgBox(0, 0, $var)
EndFunc   ;==>_msg

再建一1.au3
内容为
#include "2.au3"
Global $var = "你好"
_msg()

接下来,编译1.au3,你会发现编辑器提示变量$var 未申明,不管,直接继续编译,你会发现程序是可用的.

或者直接运行1.au3也是可用的,这个提示算是一个不正确的提示吗?

afan 发表于 2010-8-18 01:05:49

应该算编辑器的Bug

pusofalse 发表于 2010-8-18 01:29:06

没啥话~ 就是想提醒一下楼主,如果2#afan兄或之后的朋友帮你解决了这个问题,请给标题加注“已解决”字样,而不是“解决鸟”,因为没人会用“解决鸟”作为关键字来搜索同类问题,请顺便连同你以前的帖子一起改过来。

rolaka 发表于 2010-8-18 10:54:20

实际是写的不规范把

这个文件用到的最好在这个文件里写明 留着这种隐患很不值得...

xsjtxy 发表于 2010-8-18 11:13:17

回复 1# itljl


    可以这样理解。编译。相当于整合。

itljl 发表于 2010-8-18 12:27:16

回复 4# rolaka

是这样的,假设你有一个程序,比较复杂的程序,如果将所有的UDF都写在一个文件,这个文件就很大,不方便阅读和编辑,拉个滚动条都要很长时间,而将不同的逻辑功能实现写进不同的文件中并包含起来,这样可以在逻辑上比较清晰.

假设在主 main.au3 中建了窗口 Global $form1

在1.au3中调用的话,不能再再去定义一次$form1啊?(当然这个1.au3我们不是通用的UDF,就是针对main.au3这个文件特殊的一个模块.)

itljl 发表于 2010-8-18 12:30:45

回复 3# pusofalse


    已更正

rolaka 发表于 2010-8-18 13:40:23

本帖最后由 rolaka 于 2010-8-18 13:42 编辑

回复rolaka

是这样的,假设你有一个程序,比较复杂的程序,如果将所有的UDF都写在一个文件,这个文件就很 ...
itljl 发表于 2010-8-18 12:27 http://www.autoitx.com/images/common/back.gif
要做到这个 也不能用这样的办法Global $var = "你好"应该在被#include的"2.au3"里 而不是在include他的1.au3里

函数这东西把 我推荐是用传递参数 要对值进行修改就用引参传递 全局变量不是什么好东西{:face (349):}

udf个人理解相当与一个封装好的工具集 不应该用到一个可能忘记被声明赋值的全局变量


就算认为include的不是udf 而是程序的一部分 一个模块 也不应该这样用...会忘记 会出错...

kn007 发表于 2010-8-18 13:47:22

个人认为include就是等编译时合并与主程序在一起,你可以用下整理功能,他把所有include都去除,直接合并到你的源码,并剔除未使用的func。

scite不会过多读取include,

xsjtxy 发表于 2010-8-18 13:52:53

试试这样
1.au3
#include "2.au3"
$m = "你好"
_msg($m)
2.au3
func _msg($msg)
msgbox(0,"",$msg)
endfunc

itljl 发表于 2010-8-18 14:05:36

回复 10# xsjtxy

谢谢各位的回复,我想过这样,标准的确实也应该这样写

只是有时候如果里面变量太多的话,
那不是得
Func _xFunc(z,x,y,z,....)

主要就是这个问题。

G,man。 发表于 2010-8-18 16:18:24

应该是吧,随便学习下。
页: [1]
查看完整版本: 变量未申明,这算BUG吗?