purebasic.info

PureBasic forum
Текущее время: Пт апр 27, 2018 11:43 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Mакросы FAsm
СообщениеДобавлено: Ср сен 19, 2007 1:25 pm 
Не в сети
док

Зарегистрирован: Вт сен 18, 2007 9:16 am
Сообщений: 162
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Исключительно для общего развития :)

Помимо встроенного Macro можно юзать ассемблерные макросы:

Код:
1
2
3
4
5
!macro test 
!{
MessageRequester("test","hello")
!}
! test



Проблемка возникает в другом :) пурик явно не готов к такому повороту событий... Если в таком макросе использовать несколько вложенных ифов(селектов, вайлов), то вполне можно нарваться на сообщение типа:
Цитата:
purebasic.asm assembler error
test
_EndIf15
Symbol already defined


Этого не будет, если макрос вызывается один раз.. Но что делать если макрос используется многократно? Давайте разберемся в причине ошибки. В топике про ГоуТу я приводил пример во что превращается конструкция иф-эндиф. Становится понятно, что _EndIf15 - это всего лишь метка. Многократное использование макроса приводит к дублированию метки, что недопустимо.

Но проблема решаема. Достаточно сказать, что эта метка должна быть локальной. Таким образом при каждом вызове макроса метка уникальна и проблем не будет. В начале макроса пишем:
Код:
1
2
3
4
5
 
!macro test {
!  local  _EndIf15
; код макроса
!}



Возможно, при компиляции фасм ругнется на другую метку внутри макроса, пропишем и её:
Код:
1
2
3
4
5
6
 
!macro test {
!  local  _EndIf15
!  local  _EndIf14
; код макроса
!}



И так до тех пор, пока не перестанет ругаться (сколько условий, столько и меток) :)

Возможно кому-то эта информация окажется полезной. Лично я использую ассемблер в коде где только возможно, лишь бы это не мешало читабельности кода


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB