XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
[cJass] Вопросы и предложения
Какой конечный синтаксис у дефайна? Он создаёт промежуточную функцию, или каждый раз вызывает исходную?

Отредактировано FREEZE_ball, 02.09.2009 в 16:27.
Старый 02.09.2009, 16:11
adic3x

offline
Опыт: 108,439
Активность:
хм, это одним постом не обьяснишь
define NAME = VALUE
в двух словах
покажи что хочешь задефайнить
ADOLF добавил:
Он создаёт промежуточную функцию, или каждый раз вызывает исходную?
Оо ты о чем? он ничего не создает... он существует только в "компиляторе"
Старый 02.09.2009, 16:27
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
Поправил название темы...

ADOLF, я имею ввиду вот что:

Код:
//Предположим, создаю дефайн:
define echo() = BJDebugMsg("Echo!")
//Потом вызываю его:
echo()

Так вот, из компилятора cJass выходит
Код:
function echo takes nothing returns nothing
call BJDebugMsg("Echo!")
endfunction
...
call echo()

или


Код:
...
call BJDebugMsg("Echo!")

?
Старый 02.09.2009, 16:34
Hellfim
Новичок
offline
Опыт: 79,611
Активность:
FREEZE_ball, второе разумеется.
Старый 02.09.2009, 16:43
ShadoW DaemoN

offline
Опыт: 36,798
Активность:
FREEZE_ball, конечно второе.
Дефайны - это, грубо говоря, список для автозамены при сборке кода.
Ах да, у тебя синтаксическая ошибка в объявлении, надо вот так:
// notice the "<" and ">" brackets
define <echo()> = BJDebugMsg("Echo!")
При компиляции с твоим вариантом код будет таким: call BJDebugMsg("Echo!")(), а с вышеуказанным - без лишних скобок в конце.
Старый 02.09.2009, 17:05
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
Hellfim, поблагодарю и за ту тему, и за эту.

Предложение: сделать удаление комментов во время компиляции cJass`ом опциональным. Я часто смотрю конечные названия функций (для ExecuteFunc в случаях приватных/публичных функций в областях/библиотеках), и в тоннах кода, в которых нету моих комментариев, разобраться не могу.

Можно сделать аналог дефайна на группу функций?

FREEZE_ball добавил:
ShadoW DaemoN, спасибо.
Старый 02.09.2009, 17:08
Hellfim
Новичок
offline
Опыт: 79,611
Активность:
define <KillAndRemove(who)> {
    KillUnit(who)
    RemoveUnit(who)
}
Насколько я знаю.
хмм лол, ты тоже забыл <...>

Отредактировано ShadoW DaemoN, 02.09.2009 в 17:36.
Старый 02.09.2009, 17:29
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
Для чего нужен void? Я C++ не изучал.
Старый 02.09.2009, 17:46
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
FREEZE_ball, это takes nothing returns nothing. Смотря где пишем, если тип функции, то ниче возвращать не надо, если тип принимаемых аргументов (точнее вместо аргументов) то функция ниче не принимает. Ну это в си, как в сиЖассе... одному Адику ведомо. ^_^
Старый 02.09.2009, 17:53
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
MF, пройдёт код
Код:
private void SomeFunc(void) {
}
//вместо
function SomeFunc takes nothing returns nothing
endfunction
//?

?
Старый 02.09.2009, 18:24
Hellfim
Новичок
offline
Опыт: 79,611
Активность:
Старый 02.09.2009, 18:28
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
MF, ненене =) войд — это просто nothing
define {
    int   = integer
    bool  = boolean
    void  = nothing
    float = real
    func  = function
}

define KillAndRemove(who) {
    KillUnit(who)
    RemoveUnit(who)
}
нифига тут <> не нужно

Приведу кусок из находящегося в разработке мануала для пояснения синтаксиса записи функций:
Для большего удобства и повышения наглядности, синтаксис cJass допускает упрощенную запись функций (и методов vJass). В общем виде, она выглядит так:
nothing test(integer x) { 
    BJDebugMsg(I2S(x)) 
}
Теперь разберем её подробнее: сначала пишется тип возвращаемого значения (в приведенном примере функция не возвращает ничего, поэтому там стоит тип nothing), за которым следует имя функции, после чего в круглых скобках записываются принимаемые функцией аргументы (если функция не принимает аргументов, скобки можно оставить пустыми), и завершается запись блоком кода функции, заключенным в фигурные скобки.
Вот, например, во что превратится приведенный выше фрагмент кода после трансляции:
function test takes integer x returns nothing
    call BJDebugMsg(I2S(x)) 
endfunction
Таким же образом записываются и методы, применяемые в vJass. Парсер сам определит, чего от него ждут — объявления функции или метода.
Старый 02.09.2009, 19:29
adic3x

offline
Опыт: 108,439
Активность:
напомню что префиксы в функции (будь то private или public) пишуться перед типом
public int fx () {}
Старый 02.09.2009, 22:53
ScorpioT1000
Работаем
offline
Опыт: отключен
это уже к вжасс)
Старый 02.09.2009, 22:58
adic3x

offline
Опыт: 108,439
Активность:
сЖасс дб совместимым с вЖассом, из этого и исходим
Старый 03.09.2009, 13:14
ScorpioT1000
Работаем
offline
Опыт: отключен
я имел ввиду, что это и так знают юзеры вжасса)
Старый 03.09.2009, 13:26
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
Почему бы не убрать необходимость инклуда .j файлов?

Кстати, а зачем их вообще инклудить?
Старый 03.09.2009, 13:38
adic3x

offline
Опыт: 108,439
Активность:
Почему бы не убрать необходимость инклуда .j файлов?
зачем?
Кстати, а зачем их вообще инклудить?
что бы просто что то включать в код, без копипасты и разбирательства что да куда или написания велосипедов?
Старый 03.09.2009, 13:48
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Плюс, если речь идет о стандартной библиотеке, то она точно есть если установлен cJass — это позволяет не включать их в код, а спокойно инклюдить =)
Старый 03.09.2009, 13:57
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
ADOLF, я спросил из академического интереса, никакой риторики/сарказма в моём вопросе не было.

Следующий вопрос: какие именно файлы инклудить для получения полной функциональности cJass`а при версии 1.24б, желании писать быстрее и последнем апдейте AdicHelper`а?
Старый 03.09.2009, 14:04
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 06:13.