Go-to

Тема в разделе "Флудилка", создана пользователем Рокки1945, 25 авг 2020.

  1. parovoZZ

    parovoZZ Гуру

    А для чего такие конструкции создавать?
     
  2. SergeiL

    SergeiL Оракул Модератор

    Я так понимаю - не для чего, но это возможно, используя преобразование типов данных.
     
  3. Asper Daffy

    Asper Daffy Иксперд

    Сам-то как думаешь? Чтобы писать программы грамотно и эффективно ты спросил!
     
  4. Asper Daffy

    Asper Daffy Иксперд

    Почему не для чего? Для того, чтобы ответить на Ваше предположение, что goto ограничено одной функцией и показать, что "в действительности всё не так, как на самом деле" :)
     
    SergeiL нравится это.
  5. a1000

    a1000 Гуру

    Если мы возьмём пример из
    #54
    и тупо прицепим его к пустому скетчу
    Код (C++):
    void setup() {
      // put your setup code here, to run once:

    }

    void loop() {
      // put your main code here, to run repeatedly:

    }

    int func_A(int  a, int b)
    {
        if (a< 10)
        {
            int c = 0;
            c = b-a;
            if (c >20)
                goto label_1;
        }
        return (a);
    label_1:
        return (b);
    }

    Это безобразие скомпилируется без вопросов.
    Но если метку label_1 перенести за пределы функции
    Код (C++):
    void setup() {
      // put your setup code here, to run once:

    }

    void loop() {
      // put your main code here, to run repeatedly:
      label_1:
    }

    int func_A(int  a, int b)
    {
        if (a< 10)
        {
            int c = 0;
            c = b-a;
            if (c >20)
                goto label_1;
        }
        return (a);

        return (b);
    }
    компилятор выдаст ошибку. Такой код со временем вызовет срыв стека.
     
  6. parovoZZ

    parovoZZ Гуру

    Компиляторы GCC сами же рассчитывают глубину стека?
     
  7. a1000

    a1000 Гуру

    Ну так потому и ошибка. Определяет к чему ведёт такой алгоритм и ругается.
     
  8. SergeiL

    SergeiL Оракул Модератор

    Стало интересно - проверил в MS С v.6.0.
    Ни один из вышеуказанных вариантов не скомпилировался без ошибок.
    Вот Вам и реализация Opensource...
     
  9. Asper Daffy

    Asper Daffy Иксперд

    Дело не в реализации - это расширение языка, т.е. возможности, которых нет в стандарте. Borland C++ (Rad Studio 10.2.3) тоже не Open Source, но такие вещи вполне компилирует.

    Вот здесь пример ещё смешнее есть.
     
    Andrey12 нравится это.