Procedures Overview
Overview of the different FB procedure types.
Procedures are blocks of code that can be executed, or called, from anywhere in a program, any number of times. The code that is executed is called the procedure body. There are two types of procedures in FreeBASIC: procedures that don't return a value and procedures that do.
Subs
Subs are procedures that don't return values. They are declared using the `Declare` keyword, and defined using the `Sub` keyword. Declaring a procedure introduces its name so that it can be called, and a procedure definition lists the statements of code that will be executed when called. A sub is called simply by using its name somewhere in the program.
`
' introduces the sub 'MyProcedure'
Declare Sub MyProcedure
' calls the procedure 'MyProcedure'
MyProcedure
' defines the procedure body for 'MyProcedure'
Sub MyProcedure
Print "the body of MyProcedure"
End Sub
`
will produce the output:

    the body of MyProcedure

Notice that only the declaration is needed to call the procedure. The procedure can be defined later in code, or even in a different source file altogether.
Functions
Functions are procedures that return a value back to the point in code in which they are called. You can think of a function call as evaluating to some expression, just like a variable or object. They are declared using the `Declare` keyword, and defined using the `Function` keyword. The type of value that functions return is specified at the end of the declaration.
`
' introduces and defines a procedure that returns an integer value
Function MyProcedure As Integer
Return 10
End Function
' calls the procedure, and stores its return value in a variable
Dim i As Integer = MyProcedure
Print i
`
will produce the output:

    10

Since a definition is a declaration, a procedure can be called after it has been defined, as well.
It is a common convention when calling a procedure to place parenthesis `'()'` after the procedure name, to signify a procedure call. FreeBASIC does not require this, however.
See also

- Passing Arguments to Procedures
- Returning Values
- `Declare`
- `Sub`
- `Function`