Логические операторы (отличия от др. языков)
От: Spivot  
Дата: 31.10.03 15:36
Оценка:
Этот пост написать меня сподвиг баг, на к-ый я потратил около дня...

Преамбула: писать на бейсике начал недавно, до этого все больше на С++ (6 лет)
Амбула: обработка логических операторов отличается от С (а точнее идет побитовое обработка, т.е. & вместо &&). И то, что я до этого считал как аксиому, теперь работает по другому

Вот меня и интересует, как в других языках программирования будет работать следующий код?

Private Function test(res As Boolean) As Boolean
    test = res
    Debug.Assert False

- для сишника этот код никогда не должен вызоваться

    MsgBox "Test was called"
End Function

Private Sub BTest_Click()
    Dim cond1 As Integer, cond2 As Integer
    cond1 = &HF0: cond2 = &HF
    
    If cond1 And cond2 Or test(False) Then

- для сишника test не вызовется

        MsgBox "result true"
    Else
        Debug.Assert False
        MsgBox "This is impossible1"
    End If
    
    If True And True Or test(False) Then

- для сишника test ну точно не вызовется!!

        MsgBox "result true"
    Else
        Debug.Assert False
        MsgBox "This is impossible2"
    End If
End Sub

Интересно, многие ли люди на этом попадались?

С уважением
____________________________
Smile! It irritate everyone!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.