powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Компилятор не предупреждает об ошибке сравнения переменных String и Integer
32 сообщений из 32, показаны все 2 страниц
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34189671
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Command1_Click()
Dim var_str As String
Dim var_itg As Integer
var_str = "ТРПР"
var_int =  666 
If var_str <> var_int Then
    MsgBox "НЕ РАВНО"
End If
End Sub
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34189729
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В бэйсике с этим всё в порядке, а вот в дельфе бы такое не прокатило. там бы надо было преобразовывать integer в string.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34189766
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только Delphi предупреждает об ошибке?
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34189847
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
об ошибке не предупреждает и варинги не дает, а вот если ошибка будет, то тогда вылетит
есть другой вариант - Val

аффтопитезь
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34189850
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кроме delphi и бейсика ничего не пробовала.
пусть напишут те, кто другие языки пробовал.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34189857
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенькакроме delphi и бейсика ничего не пробовала.
пусть напишут те, кто другие языки пробовал.

в других языках сделано гораздо приличней, и долговременная операция конвертации делается только вручную.

а VB- это так..., залетно
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34189945
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наскольк я знаю, visual basic - это единственный язык который настолько умен.
Правда цена за это - пресловутый оператор Set.
Все другие basic-и, и вообще другие языки сами не выполняют такие сложные преобразования типов.
Даже SQL.
Надо всегда помнить про закулисные преобразования типов и когда потребуется - "помочь" компилятору VB.
Можно бы изучить все правила по которым работают вариантные переменные, но лучше просто приводить явно к одному типу оба операнда в проверке условия.
Строгая типизация языков - это хорошо, но все равно приходится иметь дело с преобразованиями типов которые только в ран-тайме дадут ошибки. Например, преобразовать строку из файла или из контрола в дату или число. У вас могут быть две записи в текстовой строке, хранящие одинаковые данные, но различные по тексту.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34190065
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне бы хотелось, что бы компилятор не дал бы создать exe файл, пока не будут исправлены подобные ошибки. Настенька подсказывает, что Delphi - такой язык. А кроме Delphi ? Какие ещё компиляторы предупредупреждают такие ошибки ?
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34190864
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_Мне бы хотелось, что бы компилятор не дал бы создать exe файл, пока не будут исправлены подобные ошибки. Настенька подсказывает, что Delphi - такой язык. А кроме Delphi ? Какие ещё компиляторы предупредупреждают такие ошибки ?

великий и ужасный си.
(если ты вообще понимаешь, что пишешь, то рабооать будет)
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34190891
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А С ++?
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34191091
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_А С ++?

см. пост выше

паскаль еще (но делфя - его следующая модель эволюции)
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34191366
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_

Если поставить Option Explicit, то сразу окажется, что вы забыли отдекларировать переменную var_int.

Отдекларируйте ее, и тогда Компилятор сразу начнет предупреждать об ошибке сравнения переменных String и Integer:

Run-time error '13':
Type mismatch.

Настенька,

В бэйсике с этим всё в порядке, но не в том смысле, как вы думаете.

Всем успехов.

VladConn
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34191656
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnОтдекларируйте ее, и тогда Компилятор сразу начнет предупреждать об ошибке сравнения переменных String и Integer:Эээ... Option Explicit отвечает все-таки за обязательную декларацию, но никак не за сравнение.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34191781
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и что?

Там товарищ выдавал Variant за Integer, не осознавая этого, как раз из-за отсутствия Option Explicit. И сравнение проскальзывало без проблем как раз из-за отсутствия Option Explicit. Ведь Variant принимает любой тип. Т.е. косвенно именно отсутствие Option Explicit привело к невыявлению ошибки несоответствия типов. Несоответствия типов просто не было . А с Option Explicit было бы. И какая разница: в процессе сравнения или вычитания со сложением.

Visual Basiс может простить какую-то небрежность при, например, конкатенации строк и чисел, преобразуя "сумму" в новую строку, это да. Меня лично такая небрежность раздражает, и я всегда стараюсь преобразовывать типы сам, не полагаясь на компилятор. По-крайней мере, это демонстрирует осознанность действий кодирующего и его сознательность. По этой же причине я никогда не использую знак "+" при конкатенации строк, а только "&". Tогда если попадутся числа, а не строки, пусть по очень маловероятной причине, то сложения не произойдет.

VladConn
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34191969
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне вот этот option explicit вообще раздражает.
надо все переменные объявлять. без него всё хорошо работает.
вспоминаю дельфю, делали курсовик по математике, так там floattostr, strtofloat, inttostr, strtoint были чуть ли не в две строки. выглядело всё очень некрасиво и нечитаемо.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34192020
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnЕсли поставить Option Explicit, то ...
Указал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Option Explicit
Private Sub Command1_Click()
Dim var_str As String
Dim var_itg As Integer
var_str = "ТРПР"
var_itg =  666 
If var_str <> var_itg Then
    MsgBox "НЕ РАВНО"
End If
End Sub
Одна ошибочка исправилась, а на сравнение компилятор как не ругался, так и не ругается.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34192048
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прекрасно он ругается, пишет type mismatch - несовпадение типов.
сейчас то что не так?
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34192235
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенькамне вот этот option explicit вообще раздражает.

5 баллов!

Worobjoff
Все другие basic-и, и вообще другие языки сами не выполняют такие сложные преобразования типов.
Даже SQL.
Вы не правы, T-SQL тоже выполняет сам такие преобразования. А вот PL/SQL - нет.

klen_Настенька подсказывает, что Delphi - такой язык.
Настенька ошибается, Delphi - это не язык, а среда программирования.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34192384
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnНу и что?

Там товарищ выдавал Variant за Integer, не осознавая этого, как раз из-за отсутствия Option Explicit. И сравнение проскальзывало без проблем как раз из-за отсутствия Option Explicit. Ведь Variant принимает любой тип. Т.е. косвенно именно отсутствие Option Explicit привело к невыявлению ошибки несоответствия типов. Несоответствия типов просто не было. А с Option Explicit было бы. И какая разница: в процессе сравнения или вычитания со сложениемТогда уж объявить как Integer , а не просто объявить . ;)
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34192955
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я говорю, компилятор не ругается, когда создаю exe файл - не ругается. А то что в момент выполнения выходит сообщение type mismatch это уже любой язык, среда, интерпретатор, об этом скажет.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34192987
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А откуда компилятору знать какой диапазон значений может принять переменная? Может сравнение прокатит: 111 = "222"; а может и нет: 111 = "ааа".
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34193319
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkiades ошибается, Delphi - это именно язык, по крайней мере, производитель несколько лет об этом говорит.

klen_,
Вообще разговор бессмысленный. У каждого языка свои правила преобразования типов, чем сложнее язык, тем сложнее правила. У VB они простые. ПишИте на Аде, там проверки типов жестокие. :)
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34193805
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БенедиктMelkiades ошибается, Delphi - это именно язык, по крайней мере, производитель несколько лет об этом говорит.

Прошу прощения, мы оба оказались правы. Просто я перестал следить за Borland.

Delphi — язык программирования, ранее известный как Object Pascal,
разработанный фирмой Borland и изначально реализованный в её пакете Borland Delphi,
от которого и получил в 2003 году своё нынешнее название.
По сути является наследником языка Pascal с объектно-ориентированными расширениями.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34193871
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy:

"...Тогда уж объявить как Integer , а не просто объявить. ;) ..."

Так само собой. Здесь же форум по VB, а не домохозяек.

Настенька:

"...мне вот этот option explicit вообще раздражает.
надо все переменные объявлять. без него всё хорошо работает...
"

Вы много потеряли в моих глазах, Настенька. Вы вот еще без тормозов машину поводите. С ними так все тормозится...

:0)

VladConn
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34193973
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"... А откуда компилятору знать какой диапазон значений может принять переменная? Может сравнение прокатит: 111 = "222"; а может и нет: 111 = "ааа "."

Компилятор конечно такого знать не может. Но вот сама среда, где пишется код, в принципе должна бы не допускать смешения типов. Здесь klen_ прав. И Microsoft в курсе этого пробела. В VB.NET добавлена Option Strict On, что и заполняет досадный пробел. Вот что там происходит как только впечатывается код: Option Strict On disallows implicit conversions from 'String' to 'Double'.

Но это уже не для Настеньки ;0)
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34195183
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы много потеряли в моих глазах, Настенька. Вы вот еще без тормозов машину поводите. С ними так все тормозится...

а вы в моих, vladconn. меня тут многие поддержали. и этот option explicit никому не нравится.
а машина ничего не тормозит. у каждого своё мнение. не надо других критиковать.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34195521
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенькамне вот этот option explicit вообще раздражает.
надо все переменные объявлять. без него всё хорошо работает.
вспоминаю дельфю, делали курсовик по математике, так там floattostr, strtofloat, inttostr, strtoint были чуть ли не в две строки. выглядело всё очень некрасиво и нечитаемо.
НастенькаВы много потеряли в моих глазах, Настенька. Вы вот еще без тормозов машину поводите. С ними так все тормозится...

а вы в моих, vladconn. меня тут многие поддержали. и этот option explicit никому не нравится.
а машина ничего не тормозит. у каждого своё мнение. не надо других критиковать.

Настенька, смею предположить, что вас поддержали люди не искушенные в программировании. Объявление всех используемых переменных является одним из важнейших методов оптимизации кода, т.к. все не объяленные переменные трактуются компилятором как Variant, а Variant обрабатывается в 2-3 раза медленнее, чем тот же Long.

Есть много статей на эту тему. Вот первые попавшиеся в google:
Оптимизация кода в Visual Basic
88 советов по оптимизации программ на Visual Basic

Даже если вы пишете на Delphi, эти советы помогут.

klen_Мне бы хотелось, что бы компилятор не дал бы создать exe файл, пока не будут исправлены подобные ошибки. Настенька подсказывает, что Delphi - такой язык. А кроме Delphi ? Какие ещё компиляторы предупредупреждают такие ошибки ?
VB6 подобные "ошибки" не отслеживает, впрочем как и ошибки в бизнес-логике :)

Если речь идет о том, что надо быстренько навалять код, подчистить его с помощью компилятора и в работу - то это не программирование, а баловство.
А если надо написать рабочую программу, то ошибки лучше не допускать:
Объявите переменные как
Код: plaintext
1.
2.
3.
4.
5.
Dim strName as String
Dim intNumber as Long
или
Dim sName as String
Dim iNumber as Long
Это поможет вовремя увидеть, где необходимо преобразовать тип переменной.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34195669
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу преобразований типов и "умности" VB 6 в этом плане
Никогда не забуду поиск одного интересного бага, к-й проявлялся только в трех отделениях одной организации. А все почему ?
Вот такое преобразование
Код: plaintext
CDate("1.112")
VB может сделать и далее до
Код: plaintext
CDate("12.112")
А вот такое
Код: plaintext
CDate("13.112")
уже нет.
Соответственно в отделениях с id от 1 до 12 все работало, а начиная с 13-го уже нет
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34196122
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Rustygold]
VB6 подобные "ошибки" не отслеживает, впрочем как и ошибки в бизнес-логике :)
Если речь идет о том, что надо быстренько навалять код, подчистить его с помощью компилятора и в работу - то это не программирование, а баловство.
quot]
Совершенно согласен, именно баловство. Мы не являемся фирмой по производству ПО. Это отдел АСУ на заводе, где пользователи требуют чтобы всё было сделано максимально быстро. Им нет никакого дела как написан код и на чём программа сделана. Часто меняют задание, не закончив предыдущее. Поэтому и хочется иметь хороший компилятор. Понятное дело что ни один компилятор не найдёт ошибки в бизнес-логике.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34196153
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_Поэтому и хочется иметь хороший компилятор.Пишите свой )))
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34196179
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_Поэтому и хочется иметь хороший компилятор.
Хороший компилятор не тот, который умеет выявлять максимальное кол-во ляпов программиста, а тот, на языке которого вам проще писать.

Если вы хорошо знаете и VB, и C++, и Delphi, то можно повыбирать.
А зная один язык - какая разница какой компилятор ? Достаточно знать его слабые стороны.
...
Рейтинг: 0 / 0
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
    #34197210
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенька,

Лучше бы вы это не писали:

"... а вы в моих, vladconn. меня тут многие поддержали. и этот option explicit никому не нравится.
а машина ничего не тормозит. у каждого своё мнение. не надо других критиковать...
"

Вы обнаруживаете дремучее непонимание и, что страшно, неприятие основ современного программирования. Конечно, у каждого свое мнение по этому вопросу: у Microsoft и, к примеру, Francesco Balena - свое. У вас - свое. Позиции, безусловно, равны.

Я не просто критикую или, упаси Бог, хочу уколоть. Нет, конечно. Я хочу, чтобы вы, Настенька, программировали лучше, т.к. вы можете. А насчет - "меня тут многие поддержали": вы читали Ильфа и Петрова? Там есть сцена игры в шахматы. И поддержка: "Лошадью ходи, лошадью."

Вы же считаете себя опрятным человеком? Чистите зубы, гладите одежду. Можете пока-что считать использование Option Explicit главным признаком опрятности в написании приложений на VB.

Успехов.

VladConn
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Компилятор не предупреждает об ошибке сравнения переменных String и Integer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]