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
Различия диалектов
Отличия от QB
- Инициализаторы и указатели являются новыми для FreeBASIC.
См. также