Команда define
Команда define предназначена для описания макросов. Макросу можно присвоить значение одного из следующих типов: число, строка, двоичные данные или имя идентификатора. Также макросу можно присвоить значение другого макроса. В дальнейшем, для подстановки его значения, имя макроса должно быть указано как $имямакроса или $имямакроса$. Макрос может быть переопределен в другом define. Макросы описываются внутри фигурных скобок, на каждой строке может быть описан один макрос. Для инициализации макроса, после его имени ставится = и соответствующая константа или выражение. Мы рекомендуем использовать в именах макросов только заглавные буквы.
define
{
A = 0xFFFF; B = 3.0
NAME = "First and Last Name:"
ID = idname
BB = $B
}
Атрибуты
Вы можете указать у define атрибуты export и namedef. Используйте атрибут export если вы распространяете модуль в виде байт-кода (.ge файл) и хотите чтобы эти макросы можно было использовать в других программах. Если у define определения указан атрибут namedef, то все его макросы можно использовать без указания символа '$'.
define <export namedef>
{
FALSE = 0
TRUE = 1
}
func uint my( uint param )
{
if param >20 : return FALSE
if param <10 : return $FALSE // $FALSE == FALSE
return TRUE
}
Определение имени define
Вы можете указать имя у define определения. В этом случае обращение к макросам возможно как напрямую, так и с указанием define имени. Это сделано для исключения конфликтов между макросами из разных модулей. В этом случае обращение к макросу имеет следующий вид: $имяdefine.имямакроса.
// file1.g
define myflag< export >
{
FLAG1 = 0xFFF0
FLAG2 = 0xFFF1
}
// file2.g
define flags
{
FLAG1 = 0x0001
FLAG2 = 0x0002
}
func uint my( uint param )
{
if param & $myflag.FLAG1
{ ... }
if param & $flags.FLAG1
{ ... }
}
Перечисление
В Gentee нет отдельной команды для определения перечислений. Вы можете использовать для этого команду define. Если макросы не присвоено никакое значение, то его значение становится на единицу больше значения предыдущего макроса. Если предыдущий макрос отсутствует или не целое число, то значение текущего макроса становится 0. В случае перечисления макросы могут разделяться пробелами.
define
{
VAL0 VAL1 VAL2 // VAL2 = 2
ID1 = 100
ID2 ID3 ID4
ID5 // ID5 = 104
}
Выражения
Макросам могут быть присвоены не только числа, но и результаты выражений. Операндами выражений могут быть или константы или другие макросы. Вы можете посмотреть полный список возможных операция на странице Макровыражения.
define
{
VAL0 = 10 + 245
VAL1 = $VAL0 + ( 12 - 233 )
VAL2 = $VAL1 & 0xFFFF
SUMMARY = $VAL0 | $VAL1 | $VAL2
}