Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 5.45 Переход с функции на глобальную метку вне функции

Страниц (2): [1] 2 »
 

1. Kibor - 24 Октября, 2018 - 11:03:53 - перейти к сообщению
Добавлена возможность выхода с функции по команде goto на метку вне функции. Отступление от правил, но иногда может быть очень удобно, когда надо выйти с вложенных функций в определенное место общего кода без множества return.

Оператор goto позволяет переходить на строку кода с соответствующей меткой.
В функциях данный переход переходит на локальные метки (находящиеся в этой функции)
Добавлен оператор global
Синтаксис:
goto global

Будучи прописанный в функции он позволяет делать выход с функции на глобальную метку, объявленную вне функций.

Пример:

CODE:
a:;//№1
ff();


function ff()
{
a:;//№2
goto a;//Пререйдет на метку a №2
goto global a;//Пререйдет на метку a №1
}




CODE:
loop()
{
ff();
//код
messagebox ("код");//Не выполнится есть есть goto global er;
//код
er:;
}



function ff()
{
ff1();
messagebox ("ff");//Не выполнится есть есть goto global er;
}

function ff1()
{
ff2();
messagebox ("ff1");//Не выполнится есть есть goto global er;
}

function ff2()
{
messagebox ("выполнится");
goto global er;//Закоментировать что бы не переходил сразу на метку er
messagebox ("ff2");//Не выполнится есть есть goto global er;
}



На метки объявленные в include так выходить нельзя с функций не в этом include. Они не являются глобальными для другого кода.
2. AdryV - 26 Октября, 2018 - 02:47:29 - перейти к сообщению
не могли бы уточнить, насчет таймеров,
скажем если я вызову goto global er; из таймера... вызовится ли оно? продолжится ли таймер далее?
3. Kibor - 26 Октября, 2018 - 03:01:07 - перейти к сообщению
С таймера не надо делать global переход.
С него можно просто перейти на любую метку в основном коде.
Таймер при этом прервется . Если работала функция какая то она прервется тоже. Управление перейдет на метку.
4. Overdose5530 - 18 Января, 2019 - 11:03:46 - перейти к сообщению
Здравствуйте. функция в таймере. в функции есть условие после которого переход goto global a; действительно переходит на a:; но после этого глобального перехода все таймеры крашатся. код отрабатывает дальше как обычно но не 1н таймер не подает признаков.
(Добавление)
вопрос с таймера как делать переходы?
5. Zireael - 18 Января, 2019 - 13:16:26 - перейти к сообщению
 Цитата:
вопрос с таймера как делать переходы?

1. В таймере вызвать функцию, из которой можно сделать переход к глобальной метке.
2. В таймере вызвать функцию, вернуть какое-то значение и сделать переход к метке.
6. Overdose5530 - 18 Января, 2019 - 14:07:11 - перейти к сообщению
 Zireael пишет:
1. В таймере вызвать функцию, из которой можно сделать переход к глобальной метке.
2. В таймере вызвать функцию, вернуть какое-то значение и сделать переход к метке.

1й вариант если я правильно понял - у меня не работают таймеры после перехода.
2й вариант не пробовал думаю это то что мне надо. Благодарю Закатив глазки
7. Zireael - 18 Января, 2019 - 14:32:35 - перейти к сообщению
 Цитата:
1й вариант если я правильно понял - у меня не работают таймеры после перехода.

Работают.
code (Отобразить)
8. Kibor - 18 Января, 2019 - 14:45:59 - перейти к сообщению
 Overdose5530 пишет:
функция в таймере. в функции есть условие после которого переход goto global a; действительно переходит на a:; но после этого глобального перехода все таймеры крашатся. код отрабатывает дальше как обычно но не 1н таймер не подает признаков.



Исправил. Обновил.
CODE:
enabletimer(0);
enabletimer(1);
enabletimer(5);
enabletimer(15);
enabletimer(25);


loop()
{
a:;
sleep(10);
}




function f()
{
beep(3000, 300);
goto global a;
}

CREATE_TIMER(0, 200)
{
beep(1000, 200);
}


CREATE_TIMER(5, 1000)
{
f();
}

CREATE_TIMER(1, 3000)
{
beep(500, 1000);
}


CREATE_TIMER(15, 150)
{
looptime(5000)sleep(5);
}


CREATE_TIMER(25, 250)
{
sleep(5);
}
9. neba2101 - 30 Декабря, 2023 - 04:08:49 - перейти к сообщению
Содержимое #include "......Include.txt"
CODE:
CREATE_TIMER(0, 200)
{
...
if(...==1)goto global G_goto1;
if(...==2)goto global G_goto2;
...
}
enabletimer(0);
...
G_goto2:;


В основном коде подключаю #include "......Include.txt" с таймером.
CODE:
#include "......Include.txt"
...
...
...
G_goto1:;


Таймер в #include переходит только на goto global G_goto2 внутри самого Include.txt, а на метку G_goto1 из основного кода выдаёт ошибку.

Powered by ExBB FM 1.0 Final