FreeBasic Goto Keyword
last modified June 16, 2025
The FreeBasic Goto keyword provides an unconditional jump to
a labeled statement in the same procedure. While powerful, it should be
used judiciously to maintain code readability.
Basic Definition
In FreeBasic, Goto transfers program execution to a specified
label within the same function or subroutine. The target label must be
defined in the same scope as the Goto statement.
Goto can simplify certain control flows but often makes code harder to understand. Modern programming prefers structured control statements like loops and conditionals when possible.
Simple Goto Example
This basic example demonstrates the fundamental usage of Goto.
Print "Before Goto" Goto skip_section Print "This won't be printed" skip_section: Print "After label"
The program prints "Before Goto" then jumps to the label "skip_section". The middle print statement is skipped entirely. Labels in FreeBasic end with a colon.
Goto in Error Handling
Goto can be useful for centralized error handling in a procedure.
Dim value As Integer
Input "Enter a positive number: ", value
If value <= 0 Then
Goto invalid_input
End If
Print "You entered: "; value
Goto program_end
invalid_input:
Print "Error: Input must be positive"
program_end:
Print "Program complete"
This example uses Goto to handle invalid input. If the condition fails, execution jumps to the error message. The program_end label provides a clean exit point for the procedure.
Goto in a Loop
Goto can be used to break out of nested loops, which can be clearer than flag variables.
Dim i As Integer, j As Integer
For i = 1 To 5
For j = 1 To 5
Print i; ","; j
If i = 3 And j = 3 Then
Goto loop_exit
End If
Next j
Next i
loop_exit:
Print "Exited loops at i="; i; " j="; j
This nested loop prints coordinate pairs until both counters reach 3. The Goto provides a direct exit from both loops simultaneously, which would require additional logic with standard loop controls.
Goto for State Machines
Goto can implement simple state machines by jumping between sections.
Dim state As Integer = 1
state_start:
Select Case state
Case 1:
Print "State 1: Initializing"
state = 2
Goto state_start
Case 2:
Print "State 2: Processing"
state = 3
Goto state_start
Case 3:
Print "State 3: Finalizing"
Goto state_end
End Select
state_end:
Print "State machine complete"
This state machine uses Goto to loop through states until completion. Each state updates the next state before jumping back to the selector. This pattern can be useful for simple procedural state machines.
Goto with Conditional Logic
Goto can create alternative control flows based on conditions.
Dim number As Integer = 7
If number Mod 2 = 0 Then
Goto even_number
Else
Goto odd_number
End If
even_number:
Print number; " is even"
Goto number_end
odd_number:
Print number; " is odd"
number_end:
Print "Number check complete"
This example demonstrates branching program flow based on a condition. The Goto statements jump to different labels for even or odd numbers. The number_end label provides a common exit point.
Goto for Menu Systems
Simple text menus can be implemented using Goto statements.
Dim choice As String
menu_start:
Print "1. Option One"
Print "2. Option Two"
Print "3. Exit"
Input "Choose: ", choice
Select Case choice
Case "1":
Goto option_one
Case "2":
Goto option_two
Case "3":
Goto menu_exit
Case Else:
Goto menu_start
End Select
option_one:
Print "You chose option one"
Goto menu_start
option_two:
Print "You chose option two"
Goto menu_start
menu_exit:
Print "Goodbye"
This menu system uses Goto to implement a loop and handle selections. After processing each option, it returns to the menu. The structure is simple but becomes hard to maintain with many options.
Goto in Legacy Code Conversion
Goto can help when converting older BASIC code that relies on line numbers.
' Simulating old-style BASIC with line numbers Goto line_20 line_10: Print "This is line 10" Goto line_30 line_20: Print "This is line 20" Goto line_10 line_30: Print "This is line 30"
This example mimics old BASIC programs that used line numbers for flow control. Each "line" becomes a label, and Goto statements replace the original jumps. This helps when modernizing legacy code.
Best Practices
- Avoid when possible: Prefer structured control statements over Goto.
- Forward jumps only: Jumping backward can create hard-to-follow loops.
- Clear labels: Use descriptive names that explain the jump target.
- Limited scope: Keep Goto jumps within the same procedure.
- Error handling: Goto can be appropriate for centralized cleanup.
This tutorial covered the FreeBasic Goto keyword with practical
examples showing both its uses and limitations in modern programming.
Author
List all FreeBasic Tutorials.