Declare
 
Декларирует процедуру на уровне модуля или как элемент типа\класса

Синтаксис

Declare Sub name [ param_list ] [ Constructor | Destructor ]
Declare Function name [ param_list ] As return_type
Declare Operator op_symbol param_list [ As return_type ]

Type T
Declare Constructor [ param_list ]
Declare Destructor
Declare Sub name [ param_list ]
Declare Function name [ param_list ] As return_type
Declare Operator name [ param_list ] [ As return_type ]
Declare Property name [ ( [ param_list ] ) ] [ As return_type ]
End Type

Параметры

param_list
В скобках через запятую список параметров.
return_type
Возвращаемый тип Function, Operator, или Property процедуры.
name
Название или символ процедуры.
op_symbol
Название или символ оператора.
T
Имя нового пользовательского типа.

Описание

Заявление Declare декларирует Sub, Function, Operator, Constructor, или Destructor. Мы будем обращаться к одному из них, как обычно.
Подпрограммы могут быть переданы в коде не видя его определения, хотя оно должно быть определено где-то. По существу,заявление Declare вносит процедуру и заявляет, что его определение находится в другом месте. Например функция может продекларирована в верхней части модуля исходника, далее вызываться, и еще ниже определяться в нижней части исходного файла, как показано ниже в примере.

Обычно декларация практически идентична первой линии определения, за исключением предшествующего ключевого слова Declare и она не имеет тела. Кроме того атрибуты, такие как Export запрещены в декларации.

FreeBASIC, как QB, не требует декларации функций, если функции не определены в другом исходном файле или функции не находятся ниже точки вызова. Это не актуально для подпрограмм, объявленных внутри тела Type, которые должны быть всегда продекларированы в теле Type перед использованием. Если вы не продекларируете процедуры в теле Type , вы получите сообщение об ошибке.

Каждый файл , использующий функции должен иметь свою декларацию. Декларации обычно хранятся в одном или более включаемых файлах чтобы разрешить использование функции из любого модуля, который использует #include для включения.

Пример

Функция на уровне модуля:
'' Декларируем функцию sum, которая принимает два Integer и возвращает integer
Declare Function sum( As Integer, As Integer ) As Integer

   Print "the sum of 420 and 69 is: " & sum( 420, 69 )    '' Вызов функции sum

'' Определяем функцию sum, которая принимает два Integer и возвращает integer
Function sum( a As Integer, b As Integer ) As Integer
   Return a + b
End Function


Процедура на уровне типа:
Type my_type
    my_data As Integer
    Declare Sub increment_data( )
End Type

Sub my_type.increment_data( )
    my_data += 1
End Sub

Dim As my_type an_instance

an_instance.my_data = 68

an_instance.increment_data( )

Print an_instance.my_data

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

  • В диалекте -lang fb, ByVal является конвенцией для передачи параметров по умолчанию.
  • В диалектах -lang qb и -lang deprecated , ByRef является конвенцией для передачи параметров по умолчанию.
  • На уровне типа Sub/Function/Operator/Constructor/Destructor разрешаются только в диалекте -lang fb

Отличия от QB

  • В FreeBASIC, имена параметров являются необязательными.

См. также