FreeBasic
Главная
Вход
Регистрация
Пятница, 21.11.2025, 18:12Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Переопределить операторы языка
DarkDemonДата: Пятница, 19.09.2025, 06:04 | Сообщение # 1
Генерал-майор
Группа: Друзья
Сообщений: 270
Репутация: -1
Статус: Offline
Что-то не выходит у меня такая тема. Хотел переопределить CLS внутри модуля, оформленного через NAMESPACE.
Переопределить то переопределил, но с концами... Обратно вернуть обычный CLS - не выходит.

Пытаюсь в коде как видно "сохранить" старый CLS через #DEFINE OLDCLS CLS. Только вот нифига не понятно как
потом вернуть.

Код
NAMESPACE A

 #DEFINE OLDCLS CLS
 #UNDEF CLS

   #MACRO CLS()
       '  Тут операции
   #ENDMACRO

END NAMESPACE

' тут типа код который использует функции пространства имен

' а вот тут, после этого кода нужно обратно вернуть CLS


Или я чё-то неправильно делаю и там надо ещё и параметры указывать? Но как их правильно указать - хрен знает.
Не то чтобы это важно, просто хотел косметические вещи навести в коде.

Вновь вернуть пытаюсь соотв. уже снаружи NAMESPACE-a, справка говорит что макросы работают насквозь через NAMESPACE,
дефайны судя по всему тоже:

Код

  #UNDEF CLS
 #DEFINE CLS OLDCLS


В итоге после кода выше компилятор намертво зависает. Т.е. FBC висит в диспетчере полностью нагружая ядро и не создаёт exe-шник.
Может кто знает как это побороть? Версия компиля последняя, 64 бит, винда.
 
haavДата: Пятница, 19.09.2025, 10:16 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1438
Репутация: 50
Статус: Offline
Привет Леха!

Попробуй так:

Код
dim pOldFunctionCLS as sub(ByVal mode As Long = 1) 
pOldFunctionCLS = @cls 
 
NAMESPACE A 
    #undef cls 
    #macro cls() 
        print "newcls" 
        sleep(1000) 
    #EndMacro 
END NAMESPACE 
 
cls() 
 
#UNDEF CLS 
 
dim CLS as sub(ByVal mode As Long = 1) 
 
CLS = pOldFunctionCLS 
 
cls(0) ' очищаем весь экран 
 
print "oldcls" 
 
sleep(1000)
 
Если параметр для CLS использоваться не будет , то так:


Код
dim pOldFunctionCLS as sub(ByVal mode As Long = 1) 
pOldFunctionCLS = @cls 
 
NAMESPACE A 
    #undef cls 
    #macro cls() 
        print "newcls" 
        sleep(1000) 
    #EndMacro 
END NAMESPACE 
 
cls() 
 
#UNDEF CLS 
 
dim _CLS_ as sub(ByVal mode As Long = 1) 
 
_CLS_ = pOldFunctionCLS 
 
#define CLS _CLS_(0) 
 
cls ' очищаем весь экран 
 
print "oldcls" 
 
sleep(1000)


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
DarkDemonДата: Пятница, 19.09.2025, 16:02 | Сообщение # 3
Генерал-майор
Группа: Друзья
Сообщений: 270
Репутация: -1
Статус: Offline
Спасибо Стас! Идеально!
Всё как надо. Вот это у тебя глубокое понимание диалекта. Офигеть блин!
Во втором варианте, если внезапно понадобится параметр - могу и не побрезговать _CLS_.

Кстати подумывал об адресе процедуры, только забыл как это делается ну и не знал, что так просто
можно взять адрес языкового CLS, но вот про двойной #DEFINE точно бы не допёр.  Вот это да конечно)))
 
  • Страница 1 из 1
  • 1
Поиск: