• программизм vb Люблю условную компиляцию в VB6. Казалось бы, если какой-то блок выкидывается по условию, то IDE и компилятор должно меньше всего беспокоить, что там происходит. Ан нет. Очепятаешься в таком блоке – ошибка. Объявишь переменную не с тем типом – снова ошибка. Последнее особенно досадно, ибо условная компиляция может использоваться для выкидывания кода, который, скажем, использует хитрую библиотеку. Типа, если на машине зарегистрирована библиотека X, то подключаем её к проекту, ставим нужное условие, скажем, в свойствах проекта и компилируем с ней. Если нет – обходимся своими силами. А не работает – дай библиотку, IDE не узнаёт тип данных, который в екзешник всё равно не попадёт. Единственная польза от такого поведения – хак с именами элементов перечислений, которые любят терять регистр символов, но и тот – борьба с багом самой IDE.
  • Очепятаешься в таком блоке – ошибка.
    может потому что проверка "орфографии" происходит до условной компиляции?
  • В VB6 есть условная компиляция?
  • @kitt, Да. А хотелось бы после.
  • @mabu, Да.
    #If BYAKA Then
    MsgBox "Byaka!"
    #End If
  • причем вся эта хуита так и перекочевала в vba. Ровно те же проблемы. А еще добивает обязательное вычисление всех элементов логического выражения, даже не значащих — но это уже в рантайме
  • @CaufMAN, Ну так VBA – это VB5/6, только с другим набором библиотек по умолчанию (и ещё какие-то LongLong'и в Office 2007 завезли). Правда, были некоторые отличия на уровне самого языка. Я, например, когда развлекалась с одной библиотекой, решила сделать много её версий на разных языках, в том числе на VB6, VBA и VBScript. Там не использовалось ничего особо хитрого, ничего стороннего, никаких Clipboard и прочих объектов, по большей части работа со строками. Но в паре случаев код из VBA не работал в VB6 и наоборот – пришлось вносить правки. Правда, сейчас сходу не вспомню, что там было.
  • @Linda-chan, мойте руки, перед и зад
  • @kitt, Встать! Суд и срут.
  • @Linda-chan, Потому что парсёр VB6 всегда проверяет синтаксис после переключения на другую строку по ↑ или ↓ и выведет тебе модальное окно в случчае ошибки.
  • @CaufMAN,
    обязательное вычисление всех элементов логического выражения
    В таком случае рекомендую использовать вложенные If.
  • @Linda-chan,
    LongLong
    Тип VARIANT поддерживает 64‐битное знаковое целое через VT_I8 = 20, наверное это оно.
    И даже 64‐битное беззнаковое целое: VT_UI8 = 21.
  • @mabu, Тип переменных проверяется только при запуске.
  • @mabu, Там отдельно Decimal, и отдельно LongLong. при чём там ещё зависимость от разрядности процессора.
  • @Linda-chan, В заголовочниках это вот как объявляется всё gist.github.com
  • @mabu, Я говорю не о структуре Варианта, а о том, какие типы данных определяет VBA.
    Альзо:
    VT_DECIMAL = 14
    Можно ещё через просмотр библиотек типов посмотреть, что там за LongLong, но мне пока лень.