Any
 
Any - это не реальный тип, но он используется в качестве заполнителя в различных формах.

Синтаксис

identifier As Any Pointer|Ptr
или
Dim identifier As datatype = Any
или
Declare { Sub | Function } identifier ( [ ..., ] ByRef identifier As Any [ , ... ] )

Описание

Any могут использоваться в трех различных контекстах: указатели; инициализация переменной; и указывают на неизвестный тип данных в объявлении функции.

1) Специальный указатель типа называемый Any Pointer позволяет указывать на любой тип переменной. Если привести его к Integer Pointer, он будет работать как Integer, и т.д..

Вы не можете создавать переменные типа Any. Также запрещено разыменовывание Any Pointer, но Any Pointer Pointer может быть разыменован , так так это приведет к Any Pointer. Попытка разыменования результата Any Pointer будет неправильной.

Это не следует путать с типом данных Variant в Visual Basic, который может содержать любой тип переменной. FreeBASIC изначально не поддерживает тип Variant.

2) Any может использоваться как поддельный инициализатор для отключения инициализации нулем (0) для переменных по умолчанию. Это может сэкономить время в критических секциях программ. Все конечно зависит от программы... но это может стать приростом скорости для заполнения переменных с значительным объемом данных. Вы можете представить себе это как поведение по умолчанию , как в языке C.

3) Any может использоваться в прототипах функций (в операторе Declare) с аргументом ByRef, чтобы отключить проверку компилятора на предмет правильного типа переменной. Использование Any устарело и существует только для совместимости с QB, где он был единственным способом передачи массивов в качестве аргументов.

Пример

Declare Sub echo(ByVal x As Any Ptr) '' echo принимает любой тип указателя

Dim As Integer a(0 To 9) = Any '' эта переменная не инициализируется
Dim As Double  d(0 To 4)

Dim p As Any Ptr

Dim pa As Integer Ptr = @a(0)
Print "Not initialized ";
echo pa       '' передать echo указатель на integer

Dim pd As Double Ptr = @d(0)
Print "Initialized ";
echo pd       '' передать echo указатель на double

p = pa     '' присвоить p указатель на integer
p = pd     '' присвоить p указатель на double      

Sleep

Sub echo (ByVal x As Any Ptr)
    Dim As Integer i
    For i = 0 To 39
        'echo интерпретирует данные в указатель на UBYTE
        Print Cast(UByte Ptr, x)[i] & " ";
    Next
    Print
End Sub


'Пример ANY отключающий проверку типа переменной
Declare Sub echo (ByRef a As Any) '' ANY отключает проверку для типа данных, передаваемого в функцию

Dim x As Single
x = -15
echo x                  '' Передаем single в функцию, которая ожидает integer. компилятор не жалуется :)             
Sleep

Sub echo (ByRef a As Integer)
  Print Hex(a)         
End Sub



Различия диалектов

  • Не доступно в диалекте -lang qb.

Отличия от QB

  • Инициализаторы и указатели являются новыми для FreeBASIC.

См. также