FreeBasic Any Keyword
last modified June 16, 2025
The FreeBasic Any keyword has two primary uses: as Any Ptr
for generic pointer types that can accept pointers to any data type, and in array
declarations to indicate uninitialized arrays.
Basic Definition
In FreeBasic, Any Ptr is a pointer type that can point to any data type,
providing flexibility when working with functions that need to accept different
pointer types. The Any keyword is also used in array declarations
to specify that arrays should remain uninitialized.
The Any keyword is useful for creating generic functions that work with
pointers to different data types, and for declaring arrays that should not be
automatically initialized to zero.
Any Ptr Basic Usage
This example shows how to use Any Ptr to create a generic pointer
that can point to different data types.
Dim As Integer value1 = 42 Dim As Double value2 = 3.14159 Dim As String value3 = "Hello" Dim p As Any Ptr p = @value1 Print "Integer value: "; *Cast(Integer Ptr, p) p = @value2 Print "Double value: "; *Cast(Double Ptr, p) p = @value3 Print "String value: "; *Cast(String Ptr, p)
Here we declare an Any Ptr variable that can point to different
data types. We assign addresses of integer, double, and string variables to
the same pointer, then use Cast to access the values through
the appropriate pointer type.
Any with Arrays
The Any keyword is used with arrays to indicate they should not be
automatically initialized to zero.
Dim As Integer a(0 To 9) = Any '' uninitialized array
Dim As Double d(0 To 4) '' initialized to zero
Print "Uninitialized array values:"
For i As Integer = 0 To 9
Print "a("; i; ") = "; a(i)
Next
Print "Initialized array values:"
For i As Integer = 0 To 4
Print "d("; i; ") = "; d(i)
Next
This example shows the difference between initialized and uninitialized arrays.
The array declared with = Any contains unpredictable values,
while the regular array is automatically initialized to zero.
Any Ptr in Function Parameters
Functions can accept Any Ptr parameters to handle pointers to different data types.
Declare Sub PrintBytes(ByVal x As Any Ptr)
Dim As Integer num = 1234
Dim As Double dbl = 3.14159
Dim As String text = "Hello"
PrintBytes(@num)
PrintBytes(@dbl)
PrintBytes(@text)
Sub PrintBytes(ByVal x As Any Ptr)
Dim As Integer i
Print "Raw bytes: ";
For i = 0 To 7 '' Print first 8 bytes
Print Cast(UByte Ptr, x)[i] & " ";
Next
Print
End Sub
The PrintBytes subroutine accepts an Any Ptr parameter,
allowing it to work with pointers to different data types. It interprets the
data as raw bytes, demonstrating how Any Ptr provides low-level access.
Complete Example with Any Ptr
This comprehensive example demonstrates both uses of the Any keyword:
uninitialized arrays and generic pointer parameters.
Declare Sub echo(ByVal x As Any Ptr)
Dim As Integer a(0 To 9) = Any '' uninitialized array
Dim As Double d(0 To 4) '' initialized to zero
Dim p As Any Ptr
Dim pa As Integer Ptr = @a(0)
Print "Not initialized ";
echo pa '' pass to echo a pointer to integer
Dim pd As Double Ptr = @d(0)
Print "Initialized ";
echo pd '' pass to echo a pointer to double
p = pa '' assign to p a pointer to integer
p = pd '' assign to p a pointer to double
Sleep
Sub echo (ByVal x As Any Ptr)
Dim As Integer i
For i = 0 To 39
'echo interprets the data in the pointer as bytes
Print Cast(UByte Ptr, x)[i] & " ";
Next
Print
End Sub
This example shows the practical use of Any in FreeBasic. The
echo subroutine accepts any pointer type and interprets the data
as raw bytes. The arrays demonstrate the difference between initialized and
uninitialized memory allocation.
Any Initialization Syntax
The Any keyword is also used to indicate that variables or arrays
should not be initialized, leaving their contents unpredictable for performance reasons.
Dim As Integer uninit = Any '' not initialized
Dim As Integer init = 0 '' initialized to 0
Dim As Integer uninit_array(0 To 4) = Any '' not initialized
Dim As Integer init_array(0 To 4) '' initialized to 0
Print "Uninitialized variable: "; uninit
Print "Initialized variable: "; init
Print "Uninitialized array values:"
For i As Integer = 0 To 4
Print "uninit_array["; i; "] = "; uninit_array(i)
Next
Print "Initialized array values:"
For i As Integer = 0 To 4
Print "init_array["; i; "] = "; init_array(i)
Next
This example demonstrates using Any to prevent automatic initialization.
Uninitialized variables and arrays contain whatever data was previously in memory,
which can be useful for performance when you plan to immediately assign values.
This tutorial covered the FreeBasic Any keyword with practical
examples showing its usage in different scenarios where pointer flexibility
and uninitialized memory allocation are needed.
Author
List all FreeBasic Tutorials.