фасме, только чтобы можно было и макросы внутри них нормально определять. И написал... нечто. Оно работает, но я не могу понять, почему оно работает?
@Pycckuu_Bop @ProMiNick
macro __endm__ arg{}
endm fix __endm__ }
macro module name{
match =name#_included, name#_included{
define name#_included
}
module testus
match =a, a{
display "Hello, I am only one-time included module!"
}
endm
module testus
match =a, a{
display "Hello, I am only one-time included module!"
}
endm
Ты всё-таки изобрёл endm?
Оно для того, чтобы делать что-то вроде #pragma once
Так это в FASM легко реализуется. Просто проверяешь обьявлена ли была ранее переменная препроцессора, если нет - обьявляешь, вставляешь исходник. Всё.
Ну да, и делается это с помощью match. Но тогда внутри макросы придется экранировать
Через if не получится
Потому что оно не работает. } в матчах закрывает модуль. Попробуй перед endm написать display 'x',13,10 в обоих module.
А если сам include экранировать?
Не поможет и это.
macro module a* { match =a#_inc, a#_inc \{ define a#_inc } endm fix } module alice display '[alice]' endm module bob display '[bob]' endm module alice display '[alice]' endm
macro module a* { match =a#_inc, a#_inc \{ define a#_inc } endm fix } module alice macro b{ display "lol" } display '[alice]' endm module alice macro b{ display '[alice]' } endm Не будет работать
Потому что if обрабатывается на этапе компиляции, после текстовой обработки
расположение инклуда модуля важно?
Важно, потому что текстовый препроцессинг однопроходный
Обсуждают сегодня