Добавлен
Здравствуйте, в пустой карте есть код:
function present takes integer i returns integer
  return i
endfunction

function temp takes nothing returns nothing
  integer dot = 1
  dot = present(dot)
endfunction
Который останавливает компиляцию AdicHelper.
Если изменить temp на :
function temp takes nothing returns nothing
  integer dot = 1
  set dot = present(dot)
endfunction
То компилируется без проблем. В чем же подвох?

Принятый ответ

Vlod, cJass немного багнут, по всей видимости, воспринимает dot как do.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
29
5 лет назад
Отредактирован nazarpunk
0
При обращении к переменной без значения поток обрывается.
Правда? А посему декларация переменных поток не сбрасывается?
Вот у массивов все ячейки имеют дефолтное значение
А не обращение к несуществующему элементу массива возвращало null?
0
28
5 лет назад
0
Правда?
В JASS так, даже последний pjass.exe это определяет.
А посему декларация переменных поток не сбрасывается?
Не понял.
А не обращение к несуществующему элементу массива возвращало null?
Все элементы массива по умолчанию заполнены нулями.
0
29
5 лет назад
0
Все элементы массива по умолчанию заполнены нулями.
Если б это было так, то простое объявление массива сжирало всю доступную память.
0
17
5 лет назад
0
PT153:
Vlod, ты всегда пытаешься использовать переменную без значения.
Теперь переменная имеет начальное значение. Хочу отметить, что компиляция кода:
function temp takes nothing returns nothing
  integer i
  i = present(i)
endfunction
И так не вызывает ошибок. Хотя поток и оборвется при исполнении.
Обратите внимание на название переменной в вопросе
0
28
5 лет назад
Отредактирован PT153
0
Если б это было так, то простое объявление массива сжирало всю доступную память.
Что за чушь? Объявление массива аллоцирует под него место и заполняет нулями (как calloc в C). Потому начальные значения у массива есть false, 0, 0. и null. Для обычной переменной заполнения нулями не происходит, потому там может быть что угодно. Использование переменной без установленного значения (которое может быть присвоено во время определения переменной или после) обрывает поток.

И так не вызывает ошибок.
Потому что используете старый pjass.exe, используйте новый.
То компилируется без проблем. В чем же подвох?
Если писать на cJass, то надо писать на cJass. Верно будет так.
void temp() {
  integer dot = 1
  dot = present(dot)
{
function temp takes nothing returns nothing
  local integer dot = 1
  set dot = present(dot)
endfunction
0
29
5 лет назад
0
Объявление массива аллоцирует под него место и заполняет нулями (как calloc в C).
А почему нолями, а не null?
0
28
5 лет назад
Отредактирован PT153
0
А почему нолями, а не null?
Выше пояснил. 0 = false = null, в том же vJass в структурах (что являются integer) идёт сравнение с null. JASS не ругается.
0
29
5 лет назад
0
Выше пояснил. 0 = false = null, в том же vJass в структурах (что являются integer) идёт сравнение с null.
А почему он тогда ругается на false > null?
0
28
5 лет назад
Отредактирован PT153
0
А почему он тогда ругается на false > null?
Ну этого сказать не могу, но инты с null JASS норм сравнивает.
Это ещё зависит от версии pjass.exe, последний может быть на это не реагирует.
0
17
5 лет назад
0
PT153:
Vlod:
Потому что используете старый pjass.exe, используйте новый.
То компилируется без проблем. В чем же подвох?
Если писать на cJass, то надо писать на cJass. Верно будет так...
Спасибо, скачал. Новый pjass не решил проблему. Код на сjass
nothing temp() {
  integer dot = 1
  dot = present(dot)
}
также вызывает ошибку компиляции
0
29
5 лет назад
0
Vlod, переходите на новый патч с lua или на zinc. Они всяко круче cjass.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.