Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/26: Рейтинг темы: голосов - 26, средняя оценка - 4.50
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623

Насколько критично обьявление переменной в теле цикла?

28.08.2012, 17:23. Показов 6157. Ответов 66

Студворк — интернет-сервис помощи студентам
Часто приходится иметь дело с циклами в которых используются некоторые специфичные вспомагательные перменные, которые нужны только внутри цикла. Вопрос: как сказывается объявление переменных внутри тела цикла на производительность?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.08.2012, 17:23
Ответы с готовыми решениями:

[C++] объявление переменных в теле цикла
pilot007, во-первых ни когда не объявляй переменные в теле цикла. Во-вторых заголовки циклов наработками по выбору кратчайшего пути не...

В теле цикла for, переменной не присваивается значение
Суть программы в том, чтобы перевести число из десятичной системы в двоичную. Переменные: bin = бинарное число(результат) dec =...

Доступ к переменной, объявленной в теле цикла
Здравствуйте, есть следующий код using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

66
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
30.08.2012, 18:35
Студворк — интернет-сервис помощи студентам
Там это написано не в одном месте, нужно читать книгу. Вот например высказывание по поводу оптимизации компиляторов:

Многие компиляторы обладают возможностями оптимизации,
улучшающими код, который вы пишете, но лучше все же с самого начала
писать хороший код.
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2012, 18:37
Многие компиляторы обладают возможностями оптимизации,
улучшающими код, который вы пишете, но лучше все же с самого начала
писать хороший код.
Ну тогда уже лучше сразу на асме писать... "правильно"...

Человек врятли может оптимизировать код лучше компилятора тем более это может противоречить удобочитаемости и ясности кода.
0
30.08.2012, 18:39

Не по теме:

Это уже выбор каждого.

0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2012, 18:41
Подобная оптимизация это "тонкое место" поэтому я бы сказал это скорее исключение чем правило.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
30.08.2012, 18:48
Цитата Сообщение от Avazart Посмотреть сообщение
Человек врятли может оптимизировать код лучше компилятора
По этому поводу я написал свое мнение пару страниц назад.

Цитата Сообщение от Avazart Посмотреть сообщение
противоречить удобочитаемости и ясности кода.
Вот как раз объявление переменных в одном месте, в начале функции, на много лучше понимается и читается, чем разброс объявлений по все телу функции.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2012, 18:52
Да как лучше если она вне области видимости?

А не локализованость переменной?
Не факт, что где то эта переменная не перекроет другую глобальную...
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
30.08.2012, 18:57
Да вот так. Люди начинают смотреть функцию с начала а не середины. Сразу же в глаза бросаются объявленные объекты.

Добавлено через 1 минуту

Не по теме:

Как я понял, дальше спорить уже нет смысла, у каждого свой стиль, и свои убеждения.

0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2012, 18:59
C++
1
2
3
4
//  сюда  не  смотрят
{
 //  а сюда да
}
Поэтому и ошибки могут возникнуть...
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
30.08.2012, 19:00
Цитата Сообщение от Avazart Посмотреть сообщение
Не факт, что где то эта переменная не перекроет другую глобальную...
Это уже проблемы программиста, раз он использует глобальные объекты и одинаковые идентификаторы.

Добавлено через 42 секунды
Avazart, кто не смотрит? Вы? Я лично смотрю всю функцию, а не только тела операторов.
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
30.08.2012, 19:02
Цитата Сообщение от Toshkarik Посмотреть сообщение
Вот как раз объявление переменных в одном месте, в начале функции, на много лучше понимается и читается, чем разброс объявлений по все телу функции.
Вот это тоже выполнение за компилятор его работы. Это его проблемы: собрать все объявления в функции и выделить под них память. Человеку Лично мне удобнее, когда переменная объявляется рядом с местом, где в первый раз используется, а не когда между этим местом и объявлением ещё лежит кусок кода. И не пугают непонятно к чему относящиеся переменные в самом начале функции.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2012, 19:06
он использует глобальные объекты
Глобальные всмысле более глобальные чем эта...

Кстати в таком случае ваша переменная - тоже глобальная...
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
30.08.2012, 19:07
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
компилятор его работы
Работа компилятора заключается в трансляции кода, а не выполнение работы за программиста. Зачем тогда вообще заниматься программированием.
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
И не пугают непонятно к чему относящиеся переменные в самом начале функции.
Они относятся к работе функции, в которой объявлены.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2012, 19:10
Ну тогда - повторяю нужно переходить на Асемблер...
Так как с++ позволяет слишком много возможностей компилятору для оптимизации ( А зачем ? )
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
30.08.2012, 19:11
Цитата Сообщение от Avazart Посмотреть сообщение
Кстати в таком случае ваша переменная - тоже глобальная
Для меня глобальная переменная - это переменная объявленная вне любой функции или класса. А использование одинаковых идентификаторов, с разными областями видимости - зло.

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Ну тогда - повторяю нужно переходить на Асемблер...

Не по теме:

Ну и я повторюсь - если Вам нужно - переходите, это личный выбор каждого человека.

1
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
30.08.2012, 19:17
Цитата Сообщение от Toshkarik Посмотреть сообщение
Работа компилятора заключается в трансляции кода, а не выполнение работы за программиста. Зачем тогда вообще заниматься программированием.
Это часть его работы. И он выполняет не только трансляцию, а ещё оптимизацию.
Вы же не указываете, в каком порядке в память класть аргументы и локальные переменные? Неужели это тоже работа для программиста, а не для компилятора?

Цитата Сообщение от Toshkarik Посмотреть сообщение
Они относятся к работе функции, в которой объявлены.
Угу, по int i; в начале функции я могу сделать очень важный вывод, что в функции, возможно, где-то есть цикл. А то и несколько.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
30.08.2012, 19:24
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Угу, по int i; в начале функции я могу сделать очень важный вывод, что в функции, возможно, где-то есть цикл. А то и несколько.
А Вас не учили выбирать осмысленные имена переменных? Да ко всему этому я ничего не говорил о управляющих переменных цикла.
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Вы же не указываете, в каком порядке в память класть аргументы и локальные переменные? Неужели это тоже работа для программиста, а не для компилятора?
Вы придираетесь к словам, Вы сами понимаете, что я имел ввиду.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,765
Записей в блоге: 14
31.08.2012, 09:01
Цитата Сообщение от Toshkarik Посмотреть сообщение
Если объявлять пременную вне цикла - это плохой тон
- Первое (даже, в духе С - нулевое), что требуется от программы - это то, чтобы она (программа) работала. А это, в свою очередь, определяется многими факторами (среди которых на 10-м месте просматривается стиль описания переменных).
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2012, 09:30
Toshkarik, Вы же не на Сях пишите. Это на Сях нужно объявлять переменные в начале функции, а в С++ не случайно введена такая вещь как объявление переменной в блоке видимости, переменную (в основном) нужно определять в том месте, где она будет использоваться, а не в начале блока.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.08.2012, 10:26
Цитата Сообщение от ForEveR Посмотреть сообщение
Toshkarik, Вы же не на Сях пишите. Это на Сях нужно объявлять переменные в начале функции, а в С++ не случайно введена такая вещь как объявление переменной в блоке видимости, переменную (в основном) нужно определять в том месте, где она будет использоваться, а не в начале блока.
О чем кстати и пишит Дьюхерст "Скользкие места С++" Совет 16 стр 51
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
31.08.2012, 12:14
Цитата Сообщение от ForEveR Посмотреть сообщение
Вы же не на Сях пишите. Это на Сях нужно объявлять переменные в начале функции, а в С++ не случайно введена такая вещь как объявление переменной в блоке видимости, переменную (в основном) нужно определять в том месте, где она будет использоваться, а не в начале блока.
Но не в теле цикла в миллион итераций. И я показывал в этой теме как объявлять такие переменные внутри блока вместе с циклом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.08.2012, 12:14

Как в теле цикла поменять значение переменной из условия?
Вобщем цикл классический - переменная приращается на единицу до заданного предела. Но хочу, что бы величену этой перемнно можно было всякий...

Насколько критично использование Linux для обучения Ruby?
Всем привет! Смотрю первый урок от hasBrains по Ruby, там автор сильно рекомендует использование Ubuntu или MacOS для обучения Ruby. ...

Насколько критично в плане безопасности использование SSL при POST запросах?
Добрый день! Для обмена информацией САЙТ <-> 1С используются POST запросы (в обе стороны). Насколько критично использовать...

Ошибок парковок очень много (осталась одна красная по Виктоории), а СМАРТ - гуд. Насколько критично?
Доброе время суток! Виктория 4,47: СМАРТ Ошибок парковок ну очень много, а СМАРТ - гуд Под админом выполнил hdparm, появилось в...

вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле цикла
вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Жара жесть.
kumehtar 18.08.2026
Пролетают летом дни Тридцать пять жары в тени. Каждый август год от года Дарит жаркую погоду.
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru