PDA

Просмотр полной версии : [Include] TDW CJumps - переходы между функциями



VVWVV
27.04.2017, 02:32
TDW CJumps
Описание

Добавляет возможность нелокальных переходов. В Pawn есть оператор goto, который позволяет перейти абсолютно в любое место в функции, однако с помощью данного оператора невозможен переход между функциями.

Документация

setjmp - функция, устанавливающая точку возврата. Данная функция записывает все значения из регистров, чтобы при вызове longjmp вернуть всё в исходное положение.

Параметры:

env[JmpBuf] - массив для хранения указателей.
&retval - ссылка на переменную, в которую будет записано значение из функции longjmp.


longjmp - функция, переходящая на установленную точку: изменяет значения регистров на исходные.

Параметры:

env[JmpBuf] - массив для хранения указателей.
val - возвращаемое значение.


Пример использования функций:


new jmp[JmpBuf];

main() {
new ret;
setjmp(jmp, ret);

if (ret < 10) {
somefunc(ret);
}
}

somefunc(ret)
{
printf("%d", ret);
longjmp(jmp, ++ret);
}


Скачать

github (https://github.com/TDW-org/samp-include-cjump)

Установка

Перейдите в репозиторий на github (ссылка выше).
Для скачивания на открывшейся странице нажмите на кнопку "Clone or download" (зелёного цвета) и в открывшемся меню - "Download ZIP".
Все файлы библиотеки перемести в папку '/pawno/includes/'.
Скомпилировать изменённые вами скрипты.



Автор: VVWVV (http://pro-pawn.ru/member.php?4348)
Распространяется по лицензии ZLIB.

SooBad
28.04.2017, 00:12
Я бы ещё добавил заметку для тех, кто попытается "прыгать" в разные точки скрипта, таким способом, игнорируя большой объём кода.

DeimoS
28.04.2017, 15:38
Я бы ещё добавил заметку для тех, кто попытается "прыгать" в разные точки скрипта, таким способом, игнорируя большой объём кода.

Таких людей ни одна заметка не остановит =)

SooBad
28.04.2017, 15:56
Таких людей ни одна заметка не остановит =)

По сути, да. Но от таких юзеров по большей части и идут высказывания о "багах" функции и косяках автора.
Потом попробуй докажи, что они не правы. Оставление краткой нотации, как минимум, избавит от таких проблем.

DeimoS
28.04.2017, 17:03
По сути, да. Но от таких юзеров по большей части и идут высказывания о "багах" функции и косяках автора.
Потом попробуй докажи, что они не правы. Оставление краткой нотации, как минимум, избавит от таких проблем.

Благодаря таким юзерам потом многие считают, что "goto" - это зло и пользоваться им нельзя.
Я бы вообще огромными буквами в самом начале темы написал "Не пользуйтесь этим, если не понимаете предназначения и всех последствий".
Хотя и это не спасёт от идиотов

ziggi
28.04.2017, 18:05
http://habr.habrastorage.org/comment_images/910/507/d65/910507d65b46865651a323bfc796334d.png