Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables VB6:禁用变体_Variables_Compiler Construction_Vb6_Variant_Strict - Fatal编程技术网

Variables VB6:禁用变体

Variables VB6:禁用变体,variables,compiler-construction,vb6,variant,strict,Variables,Compiler Construction,Vb6,Variant,Strict,我有一个大型VB6项目,其中许多变量没有明确定义的类型,因此它们自动默认为Varianttype。手工查找所有这些是一项艰巨的任务,那么有没有办法实现自动化?在VB.Net中,可以使用“Option Strict”禁用所有变量的自动使用,但VB6没有该选项 现在我向每个类添加了DefByte A-Z,这使得默认类型为“Byte”而不是“Variant”。这让我能够在运行时捕获许多未定义的变量,只要它们被分配的值大于255。但它仍然不是完全的傻瓜证明 是否有更可靠的方法来检测所有未定义的变量 我认

我有一个大型VB6项目,其中许多变量没有明确定义的类型,因此它们自动默认为
Variant
type。手工查找所有这些是一项艰巨的任务,那么有没有办法实现自动化?在VB.Net中,可以使用“Option Strict”禁用所有变量的自动使用,但VB6没有该选项

现在我向每个类添加了
DefByte A-Z
,这使得默认类型为“Byte”而不是“Variant”。这让我能够在运行时捕获许多未定义的变量,只要它们被分配的值大于255。但它仍然不是完全的傻瓜证明


是否有更可靠的方法来检测所有未定义的变量

我认为没有“万无一失”的方法来检测所有未定义的变量。但是,该语句将要求在出现该语句的模块中声明所有变量,因此编译器将标记任何并非如此的实例。还有一个IDE选项,可以自动将此语句添加到任何新模块的开头。

我过去常常使用它来获取类似的内容。这里有一个演示版本,它会让您对它的功能有一个很好的了解。

使用
选项Explicit
装饰您的模块

这个短语应该放在您创建的每个模块的顶部。如果这样做,当遇到未声明的变量时,将导致编译器错误

然而,
Option Explicit
不会阻止无类型变量声明,例如

Dim i

变量
i
将声明为变量,即使定义了
选项Explicit
,也不会引发编译器错误。

使用程序员的文本编辑器(我使用UltraEdit),并在项目源目录中进行大规模搜索

从搜索变体开始(显然),尽管您可能已经这样做了

接下来,使用正则表达式类型搜索以下内容:

 *Dim [a-zA-Z][a-zA-Z0-9_]*\p
这应该得到
Dim x
场景,而不将尾部的
作为数据类型

使用
*Dim[a-zA-Z][a-zA-Z0-9\]*,.*
Dim a、b、c作为整数查找

使用
*Dim.*[a-zA-Z][a-zA-Z0-9.]*,.*
处理奇数球场景,如
Dim a为整数,b、c为长


Private
Global
而不是
Dim
重复上述步骤,应该可以得到几乎所有内容。

你不能简单地在整个解决方案中搜索“Variant”一词吗?@pikzen:在VB6中,如果你根本不指定类型,你会得到Variant。另外,如果你有一行像“Dim x,y,z作为整数”,只有z是整数。x和y将是变量。幸运的是,VB.NET改变了这种行为。请尝试
DefObj A-Z
,以获得更显著的编译时和运行时错误。同意。该软件并不昂贵,可以很快为自己支付费用,从而节省时间并防止出现问题。此外,还应包括“ReDim”,因为VB不需要先安装“Dim”。而且它不适用于数组、函数参数、返回值等。因此,虽然这是一项很好的工作,但也存在一些漏洞;)我只对数组使用了Redim。我确实想到了参数问题,但说实话,我对正则表达式不够流利,无法一一对应。我将把它留给比我更雄心勃勃的人:)公共和私人不能也被用来声明一个字段吗?这些也需要正则表达式。字段?领域哦,你一定是说变量。那么函数返回呢?程序参数?Regex看起来像是一个聪明的黑客,直到你看到它有多么老掉牙。诚然,它不完美,但我愿意接受80%,你可以通过一打编码良好的搜索,而不是一无所有!如果您在代码中使用了Option Explicit,那么为什么要问这个问题?@MarkBertenshaw-
Option Explicit
检查未声明的变量。它不检查声明的变量是否是OP所需的变量