VB6: отключить варианты - PullRequest
       23

VB6: отключить варианты

7 голосов
/ 19 января 2012

У меня есть большие проекты VB6, в которых многие переменные не имеют явно определенного типа, поэтому по умолчанию они автоматически принимают тип Variant.Найти всех вручную - сложная задача, так есть ли способ автоматизировать это?В VB.Net можно отключить все автоматическое использование вариантов, используя Option Strict, но VB6 не имеет этой опции.

Сейчас я добавил DefByte A-Z к каждому классу, что делает тип по умолчанию«Байт» вместо «Вариант».Это позволяет мне ловить много неопределенных переменных во время выполнения, как только им присваивается значение, превышающее 255. Но это все еще не полностью защищено от ошибок.

Существует ли более надежный способ обнаружения всехнеопределенные переменные?

Ответы [ 4 ]

5 голосов
/ 19 января 2012

Я использовал Project Analyzer Aivosto , чтобы подобрать подобные вещиЕсть демо-версия, которая даст вам хорошее представление о том, что она может сделать.

4 голосов
/ 19 января 2012

Украсьте свои модули с Option Explicit.

Эта фраза должна идти вверху каждого создаваемого вами модуля. Когда это будет сделано, это приведет к ошибке компилятора при обнаружении необъявленных переменных.

Однако

Option Explicit не будет препятствовать объявлению переменных без типа, например

Dim i

Переменная i будет объявлена ​​как вариант, и не будет выдано никакой ошибки компилятора, даже если определено Option Explicit.

2 голосов
/ 19 января 2012

Используйте текстовый редактор для программиста (я использую UltraEdit) и выполняйте массовый поиск по исходным каталогам вашего проекта.

Начните с поиска Variant (очевидно), хотя вы, вероятно, уже это сделали.

Далее используйте поиск по типу регулярного выражения для чего-то вроде:

 *Dim [a-zA-Z][a-zA-Z0-9_]*\p

Это должно получить сценарий Dim x без трейлинга As DataType.

Используйте *Dim [a-zA-Z][a-zA-Z0-9_]*,.*, чтобы найти сценарии типа Dim a, b, c As Integer.

Используйте *Dim .*, [a-zA-Z][a-zA-Z0-9_]*,.* для сценариев с нечетными шарами, таких как Dim a As Integer, b, c As Long

Повторите вышеперечисленные операции поиска с Private и Global вместо Dim, и это должно получить почти все.

2 голосов
/ 19 января 2012

Я не думаю, что есть "надежный" способ обнаружить все неопределенные переменные.Однако оператор Option Explicit потребует, чтобы все переменные были объявлены в модуле, в котором появляется этот оператор, поэтому компилятор будет отмечать все случаи, когда это не так.Существует также опция IDE, которая автоматически добавляет этот оператор в начало любого нового модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...