|
|
|
YahоО |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 198 Регистрация: 11.6.2015 Репутация: нет Всего: 1 |
При рассмотрении этого кусочка кода возникает вопрос, почему определение переменной находится в цикле? Если не меняя ничего в коде дописать до начала цикла строку int length; и тем самым более чем дважды определить length, то код все равно скомпилируется, хотя его дальнейшее выполнение будет прервано. А что мануалы? А мануалы пишут "нельзя объявить больше одной переменной с одним и тем же именем". Так как же так, почему тогда компилятор компилирует "неправильный" код, и совсем не понятно почему можно написать определение переменной в цикле, который конечно же повторяется не один раз и каждый раз определяется одна и та же переменная с одним и тем же именем? А вот такой код:
не только компилируется, но и выполняется без проблем, где одна и та же переменная определена как минимум дважды. |
||||
|
|||||
Oldshelf (Online) |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 159 Регистрация: 22.4.2018 Репутация: нет Всего: 4 |
Условие цикла может зависеть от факторов, проявляющихся только в работе программы. Например, повторить цикл C раз, где C приходит из функции, которая читает из файла, создаваемого самой программой. А внутри цикла может быть, скажем, return из функции. Тогда, в первом случае, до переменной, объявленной в цикле, может не дойти (компилятор не может быть в этом уверен), а во втором цикл оборвётся и не произойдёт объявления переменной после цикла. Видимо, чтобы не вдаваться в такие подробности, компилятор пропускает такие "ошибки". И, кажется, именно эту задачу решают статические анализаторы.
|
|||
|
||||
YahоО |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 198 Регистрация: 11.6.2015 Репутация: нет Всего: 1 |
Oldshelf, Вы конечно во всем правы, однако это не проясняет тему и не дает ответа вопрос.
Если в javascript можно злоупотреблять объявлением var, то С++ как раз напротив четко за этим следит. "до переменной, объявленной в цикле, может не дойти (компилятор не может быть в этом уверен)" и опять же в javascript есть даже такое как "Поднятие" или hoisting — это механизм, в котором переменные и объявления функций, передвигаются вверх своей области видимости перед тем, как код будет выполнен. Думаете в С++ по другому? т.е. в С++ по Вашему можно написать гору определений после того в одном из условий предусмотрен выход? Компилятор пропускает такие "ошибки" - очевидно. И невероятно Скорее всего всему этому есть какое то разумное объяснение, может быть это скобки. Ведь С++ так строг! |
|||
|
||||
YahоО |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 198 Регистрация: 11.6.2015 Репутация: нет Всего: 1 |
100 500 100 Скобки, точно! А в цикле или не в цикле это вторично, главное что в скобках. Если что не ладится берем в скобки, всего делов то ))) Даешь скобки! Это сообщение отредактировал(а) YahоО - 4.6.2021, 14:11 |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
...
Это сообщение отредактировал(а) _zorn_ - 7.6.2021, 20:40 |
|||
|
||||
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |