Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: VB4,VB5,VB6
Expertise: Intermediate
Apr 20, 1999



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Interpreted or Compiled?

It is highly unfortunate that Visual Basic doesn't offer a way to execute a group of statements only when the program is interpreted in the environment or only when it has been compiled (indifferently as native code or p-code) to an EXE file. What we badly need is a conditional compilation constant that helps us to discern between the two execution modes, as in:

#Const DebugMode = -1
#If DebugMode Then
    ' code executed only within the environment
    ' code executed only within compiled programs
#End If
Until Microsoft adds this feature to Visual Basic, we can use this function:

Function DebugMode() As Boolean
    On Error Resume Next
    Debug.Print 1 / 0
    DebugMode = (Err <> 0)
End Function
This code works because Debug.Print statements are discarded when the code is compiled, therefore the error will only occur when the function is executed within the VB IDE. Note that, even with this workaround, a symbolic compilation constant is still required, for instance when you need alternate Declare or Dim statement that refer to the same function or variable, which cannot be put inside a regular If block without raising a compile-time error.

The problem of the above function is that it resets the error code. If you don't want this side-effect, you can resort to the following function, which executes slightly slower (but only the first time it's invoked) and whose logic is a bit more contorted:

Function DebugMode() As Boolean
    Static Counter As Variant
    If IsEmpty(Counter) Then
        Counter = 1
        Debug.Assert DebugMode() Or True
        Counter = Counter - 1
    ElseIf Counter = 1 Then
        Counter = 0
    End If
    DebugMode = Counter
End Function
Francesco Balena
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date