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

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

28.08.2012, 17:23. Показов 5691. Ответов 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
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2012, 18:37
Многие компиляторы обладают возможностями оптимизации,
улучшающими код, который вы пишете, но лучше все же с самого начала
писать хороший код.
Ну тогда уже лучше сразу на асме писать... "правильно"...

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

Не по теме:

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

0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 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
8484 / 6151 / 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
8484 / 6151 / 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
8484 / 6151 / 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
8484 / 6151 / 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
38160 / 21095 / 4306
Регистрация: 12.02.2012
Сообщений: 34,677
Записей в блоге: 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
8484 / 6151 / 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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru