In particular, for the logical operators
Logical Operation Precedence Order
Not
And
Or
Xor
Eqv
Imp
Comparison Operation Precedence Order
=
><
<
>
<=
>=
Like
,Is
Arithmetic Operation Precedence Order
^
-
*
,/
\
Mod
+
,-
&
Source: Sams Teach Yourself Visual Basic 6 in 24 Hours — Appendix A: Operator Precedence
Found via a Google search for visual basic 6 logical operator precedence
.
It depends on whether or not you're in the debugger. Really. Well, sort of.
Parentheses come first, of course. Then comparisons (>, <, =, etc). Then the logical operators. The trick is that the order of execution is not defined. That means given the following expression:
If A < B And B < C Then
you are guaranteed that the < operators will both be executed before the logical And comparison. But you are not guaranteed which comparison will be executed first.
IIRC, the debugger executes left to right, but the compiled application executes right to left. I could have them backwards (it's been a long time), but the important thing is that they're different. So the actual precedence doesn't change, but the order of execution might.
Joel,
does this mean that an OR operation will not (ever) be able to skip the right hand side if the left evaluates to true, and the same for AND and false?
@[Oskar]: Yes. VB.Net defines the execution order and has the AndAlso and OrElse logical operators to do short circuit evaluation. But VB6 will always evaluate both sides of an expression. You have to simulate it with additional If/Else statements.
Yes, VB6 always evaluates both sides of an Or
or And
operator.
For example, the following will always throw an error:
Dim a as Form
If a is Nothing Or Not a.Visible Then
MsgBox "VB6 will never reach here and will instead throw an error."
End If
Use parentheses
EDIT: That's my advice for new code! But Oscar is reading someone else's code, so must figure it out somehow. I suggest the VB6 manual topic Operator Precedence. Unfortunately this topic doesn't seem to be in the MSDN online VB6 manual, so I will paste the logical operator information here. If you installed the VB6 help (the MSDN library) you will have it on your machine.
Logical operators are evaluated in the following order of precedence:
Not And Or Xor Eqv Imp
The topic also explains precedence for comparison and arithmetic operators.
I would suggest once you have figured out the precendence, you put in parentheses unless there is some good reason not to edit the code.