![]() |
|
Модераторы: bsa |
![]()
|
|
| hawk3500 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 6.2.2009 Репутация: нет Всего: 2 |
Здравствуйте, подскажите пожалуйста, когда я создаю цикл к примеру
for(int tmp=0;tmp<100;tmp++) { ..... } Как инициализируется переменная tmp? Скомпилировав такой примерчик в студии и посмотрев через IDA я увидел что tmp является регистровой переменной. Вопрос в том всегда ли так? А также важен вопрос, если у меня есть вложенные циклы for и где то во вложенном цикле я делаю прыжок(jmp) за пределы всех циклов, тем самым совершая выход ,это корректно? Вот пример такой ситуации:
--------------------
воин dzen'a |
|||
|
||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
tmp - автоматическая переменная. обычно её место в стеке. оптимизирующий компилятор может разместить автоматическую переменную в регистре, если не используется её адрес.
конечно Добавлено через 1 минуту и 18 секунд переменные i,j,k конечно уже не будут существовать, т.к. их время жизни закончилось с концом блока Добавлено через 7 минут и 44 секунды конструкторы/деструкторы отработают при этом корректно http://codepad.org/6jDkc0T1 |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Кроме того, если в теле цикла были созады на стеке переменные, имеющие деструктор, эти деструкторы будут вызваны перед выполнением goto/break/continue
|
|||
|
||||
| hawk3500 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 6.2.2009 Репутация: нет Всего: 2 |
Огромное спасибо за ответ.
Теперь этот аспект мне ясен. --------------------
воин dzen'a |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
есть правда всякие gcc у них такой код проходит
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
и что в этом коде криминального с точки зрения стандарта (с точки зрения логики и так все видно)? На С++ это всегда должно компилироваться. На Си стандарта ниже С99 могут быть ошибки из-за объявления переменной внутри оператора for. |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
нет я имел ввиду что для второго цикла K уже объявлена в первом.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
И что в этом такого? "int k" - это обычная переменная, которая ведет себя, как другие переменные. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |