Безусловный переход или глобальные переменные

Ёшкин_Кот
Дата: 12.05.2017 01:28:50
Доброго времени суток!!!
Задам вопрос, но для кого-то он покажется глупым.
Для выхода из вложенных циклов можно эти циклы затолкать в отдельную функцию или процедуру и вместо метки просто выходить из функции/процедур. Минус такого метода это глобальные переменые, с которыми будет работать функция/процедура.
Вопрос в следующем - глобальные переменные еще большее зло или я что-то совсем не так понимаю?
ZyK_BotaN
Дата: 12.05.2017 02:26:35
Ёшкин_Кот
Вопрос в следующем - глобальные переменные еще большее зло или я что-то совсем не так понимаю?

Ты что-то начал подозревать.
Зло - не безусловный переход по метке, и не глобальная переменная - сами по себе.
Зло - менее очевидный и менее гибкий код.

Если задача требует гото(и оно позволяет написать читабельный код), то нужно его использовать.
С глобальными переменными - так же.

Проблема гото в 2017-м году надумана, она была, когда фортрановцы и кубайсиковцы, свое гото лепили на каждом шагу, пописывая код на структурных языках типа си и паскаля.
Dima T
Дата: 12.05.2017 07:01:48
С глобальной переменной код становится однопоточным.
Изопропил
Дата: 12.05.2017 07:10:08
Dima T
С глобальной переменной код становится однопоточным.

не обязательно, в TLS можно положить глобальную переменную
Dima T
Дата: 12.05.2017 07:39:59
Изопропил
в TLS можно положить глобальную переменную

В XP с этим есть проблемы
https://msdn.microsoft.com/ru-ru/library/6yh4a9k1.aspx
В операционных системах Windows до Windows Vista __declspec(thread) имеет некоторые ограничения. Если библиотека DLL объявляет любые данные или объекты как __declspec(thread), это может привести к сбою защиты при динамической загрузке. После загрузки библиотеки DLL с помощью метода LoadLibrary всякий раз, когда код ссылается на данные __declspec (thread), происходит сбой в системе. Поскольку пространство глобальных переменных для потока выделяется во время выполнения, размер данного пространства основан на расчете требований приложению, а также требований всех библиотек DLL, которые привязываются статически. При использовании LoadLibrary невозможно расширить это пространство, чтобы объявлять локальные переменные потока с помощью __declspec(thread). Используйте API-интерфейсы TLS, такие как TlsAlloc, в вашей библиотеке DLL, чтобы выделить TLS, если DLL может загружаться с помощью LoadLibrary.
YesSql
Дата: 12.05.2017 07:41:57
Ёшкин_Кот
Доброго времени суток!!!
Задам вопрос, но для кого-то он покажется глупым.
Для выхода из вложенных циклов можно эти циклы затолкать в отдельную функцию или процедуру и вместо метки просто выходить из функции/процедур. Минус такого метода это глобальные переменые, с которыми будет работать функция/процедура.
Вопрос в следующем - глобальные переменные еще большее зло или я что-то совсем не так понимаю?

Зачем глобальные переменные, можно использовать темплэйты.
ZyK_BotaN
Дата: 12.05.2017 08:19:57
Dima T
С глобальной переменной код становится однопоточным.

Транзакционная память - наше всё.
Ну и опять же, не только лишь весь код - должен быть многопоточным.
Изопропил
Дата: 12.05.2017 09:25:19
Dima T
Изопропил
в TLS можно положить глобальную переменную

В XP с этим есть проблемы
https://msdn.microsoft.com/ru-ru/library/6yh4a9k1.aspx
В операционных системах Windows до Windows Vista __declspec(thread) имеет некоторые ограничения. Если библиотека DLL объявляет любые данные или объекты как __declspec(thread), это может привести к сбою защиты при динамической загрузке. После загрузки библиотеки DLL с помощью метода LoadLibrary всякий раз, когда код ссылается на данные __declspec (thread), происходит сбой в системе. Поскольку пространство глобальных переменных для потока выделяется во время выполнения, размер данного пространства основан на расчете требований приложению, а также требований всех библиотек DLL, которые привязываются статически. При использовании LoadLibrary невозможно расширить это пространство, чтобы объявлять локальные переменные потока с помощью __declspec(thread). Используйте API-интерфейсы TLS, такие как TlsAlloc, в вашей библиотеке DLL, чтобы выделить TLS, если DLL может загружаться с помощью LoadLibrary.

Это никак не мешает работать OpenGl
Siemargl
Дата: 12.05.2017 09:25:40
Чегой то вы умничаете? =)

Человек наверное про Бейсик спрашивает, в котором нет break/continue
Dima T
Дата: 12.05.2017 09:41:19
Изопропил
Это никак не мешает работать OpenGl

Невозможно и неудобно это разные вещи. Я про второе.