![]() |
Объявление переменных в Power Basic 7 |
|
Необходимо помнить, что в Power Basic 7 тип VARIANT не является типом данных
по умолчанию. В связи с этим, объявляемая переменная должна либо объявляться
как конкретный тип, либо иметь идентификатор типа. Например: DIM A AS INTEGER или DIM A%. А так неправильно: |
|
| Синтаксис | Описание
| DIM | DIM Переменная [()] AS [GLOBAL|LOCAL|STATIC] Тип [PTR|POINTER] [, ...]. | , где: "Переменная" - имя для новой переменной; "()" - переменная является массивом; "GLOBAL", "LOCAL" или "STATIC" - необязательный параметр, предоставляющий возможность альтернативного объявления; "Тип" - любой стандартный или пользовательский тип; "PTR" или "POINTER" - необязательный параметр, объявляющий переменную как указатель на "Тип"; "[,...]" - следующая "Переменная". Способ объявления методом DIM может выступать в роли стандартного объявления или эмулировать некоторые другие типы объявлений. Например: DIM A AS GLOBAL INTEGER аналогично объявлению GLOBAL A AS INTEGER. STATIC | STATIC Переменная[()] [ AS Тип] [, Переменная[()]] [, ...] | , где: "Переменная" - имя для новой переменной; "()" - массив. Объявленная таким способом переменная сохраняет своё значение после завершения (или выхода из) процедуры или функции. Это верно только для той процедуры, где была объявлена такая переменная. LOCAL | LOCAL Переменная[()] [ AS Тип] [, Переменная[()]] [, ...] | , где: "Переменная" - имя для новой переменной; "()" - массив. Такая переменная объявляется как местная (локальная) для процедуры или функции. По умолчанию все необъявленные переменные в процедурах (функциях) являются локальными. Значение переменной обнуляется при каждом вызове процедуры (функции). Возможны объявления разных локальных переменных в различных процедурах под одним именем. Массив локальных переменных объявляется пустым, а затем переопределяется. Как уже было сказано, локальная переменная является стандартной для процедур и функций. На примере это можно показать так: DIM A$ или B%=10. В данном случае и A и B являются переменными типа LOCAL. Для хранения локальных переменных используется не общее 2 ГигаБайтное адресное пространство, а специальная память, называемая стеком. Размер стека по умолчанию равен 1 МБ для всех локальных переменных конкретной процедуры. Изменить это значение можно специальной директивой компилятору (метаоператором) #STACK. #STACK Число_Кратное_64кБ REDIM | REDIM [PRESERVE] Массив[(Размерность)] [ AS Тип] [, ...] | , где "PRESERVE" - сохранять прежние значения массива; "Массив" - имя массива; "Размерность" - новый размер длины массива. При переопределении массива с пустым разрешением "()" содержимое массива стирается. Может быть использовано для переопределения как Локальных, так и Статических и Глобальных массивов. Для удаления массива используется команда ERASE. REGISTER | REGISTER переменная [ AS Тип] [ , переменная [ AS тип ]] | , где "Переменная" - имя новой переменной, "Тип" - любой известный PB тип данных. Объявленная таким способом локальная переменная отличается тем, что на неё не действуют правила компиляции, по которым значение переменной располагается либо в памяти либо в регистрах процессора (в зависимости от ситуации). Значение такое переменно принудительно всегда будет храниться в регистре. Такое объявление действительно для четырёх целых типов (Word/Dword/Integer/Long) и 4-х дробных повышенной точности. Переменные остальных типов будут автоматически преобразованы компилятором в локальные. Как говорилось выше, основное отличие регистровой переменной от обычной - размещение её значения непосредственно в исполнительном блоке процессора. На уровне машинных команд процессор производит всевозможные арифметические и логические операции с помощью регистров, которые являются своего рода руками процессора. В одну руку(регистр) процессор берёт значение-приёмник, а в другую значение-источник и производит над ними заданную операцию(и источник и приёмник и код операции закодированы внутри исполняемого файла). Если значение умещается в регистре, то программист может положить значение в регистр непосредственно. В противном случае указывается адрес, по которому находится значение, превышающее размер регистра (32 Бит). Вывод: регистровая переменная - в регистр процессора пересылается значение переменной; нерегистровая переменная - в регистр пересылается адрес начала данных этой переменной. Вы можете сами посмотреть типы данных, значения которых могут быть помещены прямо в регистр. Их длина меньше или равна 4 Байтам. |
| Синтаксис | Описание
| GLOBAL | GLOBAL Переменная[()] [ AS Тип] [, Переменная[()]] [, ...] | , где: Переменная - имя для новой переменной; "()" - массив; Тип - любой стандартный или пользовательский тип. Объявляет переменную доступную любой процедуре или функции. Аналогична объявлению DIM Переменная AS GLOBAL Тип, за исключением места объявления. Equates | Эквиваленты (глобальные константы): | Некоторые значения, которые при написании программы заменяются на легко воспринимаемые программистом имена. Значение в левой части предназначено для программиста, а значение в правой части для программы. Во время компиляции автоматически производится обратный процесс и имена заменяются значениями. %Числовая_Константа = Число Объявление может комбинироваться с помощью: Побитовых операторов - AND, OR, NOT; Операторов сравнения - +, -, >, <, >=, <=, <>, =; Функции - CVQ. $Строчная_Константа = Строка Объявление может комбинироваться с помощью: Функций - CHR$, STRING$, SPACE$, GUID$. DECLARE | DECLARE {SUB|FUNCTION} Имя [BDECL|CDECL|SDECL] [LIB "Библиотека"] [ALIAS "Псевдоним"] [([параметры])] [AS Тип] | DECLARE CALLBACK FUNCTION Имя [[()] AS LONG] , где SUB, FUNCTION, CALLBACK FUNCTION - тип объявления. Это "Процедура", "Функция" и "CALLBACK функция" соответственно. Последняя зарезервирована для использования с DDT (Динамическими Инструментами Диалогов); BDECL, CDECL, SDECL - тип соглашения о передаче параметров. Определяет способ складирования параметров в стёк для их приёма или передачи. BDECL и CDECL - это Basic/Pascal и C соответственно. SDECL(или STDCALL) - значение по умолчанию, определённое Microsoft; "Библиотека" - имя DLL из которой вызывается функция; Псевдоним - имя функции внутри библиотеки. Объявляет процедуру или функцию внутри программы или для вызова из внешней библиотеки. Объявление внутри программы необходимо для вызова процедуры/функции из любого места программы. Так, если вы не объявите внутреннюю процедуру, то она должна быть написана раньше той, из которой производится вызов. При таком объявлении имя библиотеки указывать не нужно. Для функции объявленной как внешняя, загружается указанная библиотека и вызывается из неё функция с объявленными параметрами. MACRO |
Макрокоманда: MACRO Имя_Макроса [(Параметр1, Параметр2, ...)] = Замещаемый_Текст, где "замещаемый_текст" - действия, которые должен производить макрос. Пример 1: MACRO CONST = MACROВызов: CONST Version = 1& Пример 2: MACRO Соедини(Текст1,Текст2) = Текст1 & $Пробел & Текст2Вызов: A$ = Соедини("Привет","Мир") Макроблок (макропроцедура): MACRO Имя_Макроса [(Параметр1, Параметр2, ...)][MACROTEMP Идентификатор1 [, Идентификатор2, ...]] {Замещаемый_Текст} [EXIT MACRO] {Замещаемый_Текст} END MACRO , где MACROTEMP - список идентификаторов с автоприращением (макрошаблон); Идентификатор - имя переменной, метка или любое слово, повторение которого может вызвать конфликт повторного определения; EXIT MACRO - завершение работы макропроцедуры. Аналогичен понятию GOTO END-MACRO.
MACROTEMP Метка, Переменная DIM Переменная AS BYTE Метка: Переменная = @Указатель1 @Указатель2 = Переменная INCR Указатель1 INCR Указатель2 IF Переменная < > 0 THEN GOTO Метка END MACRO При первом вызове идентификаторы будут преобразованы в Метка0001 и Переменная0001. При следующих подстановках значение будет увеличиваться на единицу. Макрофункция: MACRO FUNCTION Имя_Макроса [(Параметр1, Параметр2, ...)][MACROTEMP Идентификатор1 [, Идентификатор2, ...]] DIM Идентификатор1 AS Тип [, Идентификатор2 AS Тип, ...]] {Замещаемый_Текст} [EXIT MACRO] {Замещаемый_Текст} END MACRO = Возвращаемое_Значение |
| Весь исполняемый код (т.е. код отличный от объявлений) должен находится внутри Процедуры (или Функции). Процедуру (или Функцию) нельзя объявлять внутри другой Процедуры (или Функции). Процедура или Функция может быть вызвана командой CALL, а параметры могут передаваться по значению или по ссылке. Вызов может также осуществляться без оператора CALL. В этом случае параметры должны быть взяты в круглые скобки. |
| Синтаксис | Описание
| SUB | Процедура | [STATIC] SUB Имя_Процедуры [BDECL|CDECL|SDECL] [ALIAS "Псевдоним"] [([Параметры])] [EXPORT|PRIVATE] [STATIC] Описание синтаксиса см. в описании Функции.
[LOCAL Список_Переменных] [STATIC Список_Переменных] {Операторы} [EXIT SUB] {Операторы} END SUB FUNCTION | Функция | [CALLBACK|STATIC] FUNCTION Имя_Функции [BDECL|CDECL|SDECL] [ALIAS "Псевдоним"] [([Параметры])] [EXPORT|PRIVATE] [STATIC] [AS Тип] , где CALLBACK FUNCTION - определяет вид функции как CallBack, которая может быть использована для обработки сообщений DDT-диалогов и DDT-элементов управления. Такая функция не должна иметь параметров и её тип может быть только LONG. Она возвращает ненулевое значение для всех сообщений WM_COMMAND. Для обработки сообщений внутри CallBack
функции зарезервированы команды CBHNDL, CBMSG, CBWPARAM, CBLPARAM, CBCTL и CBCTLMSG;[LOCAL Список переменных] [STATIC Список переменных] [DIM Список переменных] {Операторы} {Имя_Функции|FUNCTION} = Возвращаемое_Значение {Операторы} [EXIT FUNCTION] {Операторы} END FUNCTION STATIC FUNCTION - изменяет способ хранения всех необъявленых явно переменных функции. По умолчанию все необъявленные переменные хранятся как локальные (LOCAL); BDECL,CDECL,SDECL - соглашение о передаче параметров; "Псевдоним" - Реальное имя функции в таблице экспорта готовой программы. Это настоящее имя функции в отличие от имени, по которому функция вызывается во время написания программы. Используется только для вызова из внешних программ; Параметры - Значения и ссылки, передаваемые функции извне. Максимальное количество параметров - 32. Способ передачи может быть BYVAL, BYREF и BYCOPY. Также возможно выборочное присутствие параметра в функции - OPTIONAL (или OPT); EXPORT - По умолчанию функция внутренняя (PRIVATE). Ключевое слово EXPORT делает функцию доступной из других модулей. Экспортируемые Процедуры и Функции могут находится только в библиотеках (DLL), но не в приложениях (EXE); PRIVATE - Функция внутренняя (PRIVATE) по умолчанию. Использование этого ключевого слова необязательно; STATIC - см. STATIC FUNCTION. Ключевое слово STATIC может быть использовано только один раз в заголовке функции. Оно ставится либо перед словом FUNCTION, либо после списка параметров (хотя в справке к PowerBasic оно стоит после слов EXPORT|PRIVATE); Тип - Тип данных возвращаемого функцией значения; {LOCAL|STATIC|DIM} Список переменных - Объявления переменных внутри функции; Операторы - Команды PowerBasic, отличные от объявлений; Возвращаемое_Значение - Значение, которое вернёт функция вызвавшему её модулю. Функции PowerBasic не могут возвращать массивы, тип Variant, или объектную переменную. Такие данные передаются в параметрах по ссылке (BYREF). |
| Синтаксис | Описание
| #COMPILE | #COMPILE {EXE | DLL} ["[Путь\]Имя_Программы"]
Эта директива используется во всех версиях
компиляторов PowerBasic для Windows.
Размещение её в начале программы обязательно. Ключи: EXE
- приложение, DLL
- библиотека динамической связи, содержащая функции на
экспорт.
#DIM | #DIM {ALL | NONE}
Определяет необходимость объявления всех
переменных в программе. ALL
- все переменные нужно объявлять, NONE
- объявление переменных необязательно.
#IF | #IF [NOT] Условие Условие - {%КонстантаКомпилятора | %DEF({%Числовая_Константа | $Строчная_Константа) | Выражение}
{Операторы} [#ELSEIF [NOT] Условие {Операторы}] [#ELSE {Операторы}] #ENDIF Директива с условием. Позволяет активизировать указанную директиву только при наличии определённых свойств системы PowerBasic, автоматически устанавливаемых в специальные константы. Здесь %КонстантаКомпилятора - это одна из %PB_CC32, %PB_DLL16, %PB_DLL32, %PB_WIN32, %PB_REVISION, %PB_REVLETTER, %PB_EXE. #INCLUDE | #INCLUDE
"Имя_Файла"
Указывает на файл с текстом программы на языке
PowerBasic, который будёт присоединён к текущему
файлу и станет его частью
#OPTION | #OPTION {VERSION3 | VERSION4 | VERSION5}
Задаёт минимально допустимую версию
операционной системы, которая необходима для запуска программы, созданной
компилятором PowerBasic. Здесь VERSION3
- Windows'95 или NT 3.51, VERSION4
- Windows'95 или NT 4, VERSION5
- Windows 2000/XP или Windows 2003.
#REGISTER | #REGISTER {ALL | DEFAULT | NONE}
Локальная директива, разрешающая или
запрещающая хранить значения переменных только в регистрах, не используя
память, что свойственно для переменных с коротким периодом жизни. ALL
- максимально, насколько это возможно, хранит значения целочисленных
переменных в регистрах центрального процессора, а вещественных чисел в
регистрах сопроцессора; DEFAULT
- распределяет значения переменных в регистрах и памяти по внутренним
алгоритмам компиляции, а для вещественных чисел только при отсутствии вызовов
других процедур; NONE -
все значения переменных хранятся в памяти, минуя регистры.
#RESOURCE | #RESOURCE
"Имя_Файла"
При компоновке исполняемых файлов
присоединяет ресурсы в отведённую для этого форматом PE-файла
секцию.
#STACK | #STACK Число
Задаёт количество локальной (стековой)
памяти, которая будет выделяться операционной системой
приложению при его запуске. Стековая память предназначена для хранения
локальных переменных процедуры(функции) и передаваемых процедуре параметров.
Эта директива актуальна только при компиляции приложения (EXE),
но не библиотеки (DLL).
Число - значение, кратное 64 КБ. Минимальное
значение 128 КБ.
#TOOLS | #TOOLS [ON|+ | OFF|-]
Разрешает или запрещает включение в
приложение отладочной информации, используемой PowerBasic IDE (редактор)
при запуске в режиме отладки. По умолчанию включено (ON),
что разрешает вставку отладочной информации. При компиляции финальной версии
приложения отладочную информацию лучше не включать внутрь, что реализуется
ключом OFF этой
директивы.
#DEBUG
|
| #DEBUG ERROR [ON|+ | OFF|-]
Разрешает или запрещает
генерацию дополнительного кода, производящего проверку
переполнения массивов и наличие пустых указателей. По умолчанию
проверки отключены (ключ OFF).
Включаются ключом ON
директивы.
#DEBUG PRINT Строка
Выводит указанную информацию в окне
отладчика.
Строка - данные для отображения в
окне сообщений отладчика.
%DEF | %DEF({%Числовая_Константа | $Строчная_Константа})
Блок условия для совместного использования с
директивами компилятора. Возвращает булево значение (истину или ложь) в
зависимости от константы компилятора, где константа компилятора одна из:
%PB_CC32, %PB_DLL16, %PB_DLL32, %PB_WIN32, %PB_REVISION, %PB_REVLETTER, %PB_EXE.
|