Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Описание: Выход с функции по двум опереаторам goto global на метку вне функции
Kibor
Отправлено: 24 Октября, 2018 - 19:03:53
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Добавлена возможность выхода с функции по команде 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. Они не являются глобальными для другого кода.
 
 Top
AdryV
Отправлено: 26 Октября, 2018 - 10:47:29
Post Id



Пользователь
Специалист


Покинул форум
Сообщений всего: 449
Дата рег-ции: Май 2016  
Репутация: 11




не могли бы уточнить, насчет таймеров,
скажем если я вызову goto global er; из таймера... вызовится ли оно? продолжится ли таймер далее?
 
 Top
Kibor
Отправлено: 26 Октября, 2018 - 11:01:07
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




С таймера не надо делать global переход.
С него можно просто перейти на любую метку в основном коде.
Таймер при этом прервется . Если работала функция какая то она прервется тоже. Управление перейдет на метку.
 
 Top
Overdose5530
Отправлено: 18 Января, 2019 - 19:03:46
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 47
Дата рег-ции: Авг. 2017  
Репутация: 0




Здравствуйте. функция в таймере. в функции есть условие после которого переход goto global a; действительно переходит на a:; но после этого глобального перехода все таймеры крашатся. код отрабатывает дальше как обычно но не 1н таймер не подает признаков.
(Добавление)
вопрос с таймера как делать переходы?
 
 Top
Zireael
Отправлено: 18 Января, 2019 - 21:16:26
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
вопрос с таймера как делать переходы?

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



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 47
Дата рег-ции: Авг. 2017  
Репутация: 0




 Zireael пишет:
1. В таймере вызвать функцию, из которой можно сделать переход к глобальной метке.
2. В таймере вызвать функцию, вернуть какое-то значение и сделать переход к метке.

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



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
1й вариант если я правильно понял - у меня не работают таймеры после перехода.

Работают.
code (Отобразить)
 
 Top
Kibor
Отправлено: 18 Января, 2019 - 22:45:59
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 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);
}
 
 Top
neba2101
Отправлено: 30 Декабря, 2023 - 12:08:49
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017  
Репутация: 4




Содержимое #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 из основного кода выдаёт ошибку.
 
 Top
Zireael
Отправлено: 30 Декабря, 2023 - 12:36:29
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




https://kibor-bot.com/forum/topi...40867#1540540867
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by