|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||
Использование неинициализированных переменных18.08.2017, 12:52. Показов 4911. Ответов 41
Метки нет (Все метки)
Есть простой код
Но на stackoverflow разные мнения по поводу корректности использования не инициализированных переменных. Вот мне интересно следующее: 1. Какие могут быть проблемы? Ведь int по умолчанию имеет значение 0, и если не ошибаюсь это требование стандарта. 2. Почему компиляторы выдают warning при использовании неинициализированных переменных? Просто что бы напомнить об этом если вдруг мы случайно забудем инициализировать переменную перед тем как используем её? 3. 2017 студия вообще отказывается компилировать код в котором используются не инициализированные переменные. Это фича такая и как то отключается? Типа "не компилить если есть хотя бы 1 warning"? Прошу разъяснить тех кто знает Добавлено через 1 минуту Особенно интересует ответ на вопрос #1
0
|
||||||
| 18.08.2017, 12:52 | |
|
Ответы с готовыми решениями:
41
Предупреждения компилятора об использовании неинициализированных переменных
использование переменных |
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||||||
| 18.08.2017, 16:18 | |||||||||||
|
Undisputed,
Потому что в этом случае:
10, т.е. 1010(2), то после операции 10 ^ 0x1 у тебя получится 1011(2), что явно не равно нулю. В то время, когда при x = 1 (true) мы получили бы 0 и не попали бы во второе условие,Это не предположение. Я точно знаю, потому что посмотрел ассемблерный листинг именно этой версии компилятора, именно на этой платформе и именно с такими ключами компиляции ![]() Другая версия компилятора может делать иначе и это поведение не воспроизведется. На то оно и UB.
2
|
|||||||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||||||||||||
| 18.08.2017, 16:42 | ||||||||||||
|
Добавлено через 6 минут А ещё будут отличия с
Добавлено через 6 минут А вместо того, чтоб мучаться с неопределённым поведением, просто пользуйся неявным или (для понимания) явным преобразованием типов. Неявное - это как в посте от hoggy, а явное это
Добавлено через 2 минуты И да, в стандарте С++ оператор if() принимает в качестве входного значения именно bool, поэтому "получать из bool bool сравнением с константным bool" нерационально.
0
|
||||||||||||
|
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
|
||||||
| 18.08.2017, 16:47 | ||||||
|
Это все потому, что Х описано, как bool.
Тем самым обозначив, что имеет смысл только 0 бит. А что вы еще хотели, собственно? Хотите, чтобы Х было bool, так и работайте с ней, как с bool Опишите Х, как int, и получите нормальную реакцию Добавлено через 3 минуты Можно и так преобразовать:
0
|
||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||
| 18.08.2017, 16:54 [ТС] | ||||||
|
TRam_,
hoggy, Ок, если сравнение идет единички и нолика с десяткой, тогда почему на том же компиляторе и с теми же ключиками ничего не выводится, в отличии от оригинала где срабатывают оба условия?
Как я понял компилятор просто берет адрес + sizeof(type) обоих операндов и делает xor, и если в результате не все нули - значит тру... Да уж... А под мусором что может подразумеваться? Либо полностью пустая память, либо всякие данные которые например остались от предыдущей программы которая вернула память ОС, и когда мы просим у ОС память для нашей программы она вполне может выделить тот кусок памяти которая вернула предыдущая программа и там будут именно те байтики которые остались от прежней программы которая владела этим участком памяти?
0
|
||||||
|
Неэпический
|
||
| 18.08.2017, 17:04 | ||
|
Далее, сравнение двух int'ов, 10 == 1 и 10 == 1. С чего бы они дали true?
0
|
||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 18.08.2017, 17:05 | ||
|
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 18.08.2017, 17:05 [ТС] | |
|
Croessmah,
Так и я о том же)) Не по теме: Ох уж этот с++
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 18.08.2017, 17:09 [ТС] | |
|
Croessmah,
Ну память же энергозависимая, после отключения питания все данные очищаются же... Я об этом. Добавлено через 18 секунд TRam_, Понятно, спасибо! Добавлено через 1 минуту Croessmah, Я к тому, что вроде бы пытался разобраться с значением по умолчанию типа int, а дошло аж до ассемблерных листингов)) Добавлено через 19 секунд Croessmah, Я к тому, что вроде бы пытался разобраться с значением по умолчанию типа int, а дошло аж до ассемблерных листингов))
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 18.08.2017, 17:20 [ТС] | |
|
Croessmah,
В пройцессор встроен умный указатель ) Все что я знаю по этому поводу эти данные которые были в памяти пропадают если отключить питание...
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 18.08.2017, 17:30 | ||
|
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 18.08.2017, 17:47 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 18.08.2017, 18:01 [ТС] | |
|
TRam_,
Ну пример такой привели, что я мог поделать?) Но думаю было круто, узнал что-то новое...) DrOffset, Ну данные программы написанные на с++ используют эту память ![]() А вообще все началось с того что я захотел уточнить что попадает под понятие "мусор" в памяти... Но т.к я наверное уже всех задолбал в этой теме то не буду идти дальше... во всяком случае сейчас))
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 18.08.2017, 18:08 | ||||
![]() Если ты питание включил, то какое-то значение в ячейке памяти в любом случае уже будет. Поэтому такого, что
![]() Добавлено через 2 минуты Мусор - это абстракция для неопределенного (в смысле непредусмотренного) программистом значения.
2
|
||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 18.08.2017, 18:17 [ТС] | |
|
DrOffset,
Аа теперь понял, спасибо) Просто я не знаю как оно хранится там в железке. Думал на плате есть зона данных, а наличие данных зависит от распределения электричества в этой зоне. А после перезагрузки питания предыдущее состояние исчезает, и данные бывают только в той части платы которая была выбрана для хранения данных которые нужны для начального запуска системы... Ну и соответственно прежнего состояния уже нет..., электричество то выключали... тогда вопрос - откуда там взяться данным?) вот так думаю... Если я продолжу изучение плюсов и железа, походу позориться на форуме мне ещё долго)) Добавлено через 1 минуту Про мусор круто сказано! Просто и понятно.
0
|
|
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
||||||
| 18.08.2017, 18:19 | ||||||
|
А это определенное поведение или нет?
![]()
Не по теме: К разговору о bool
1
|
||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||||||
| 18.08.2017, 18:53 | ||||||
|
pav1uxa, неопределённое.
Добавлено через 4 минуты Определённым будет
1
|
||||||
| 18.08.2017, 18:53 | |
|
Использование файловых переменных Использование динамических переменных Использование динамических переменных Использование переменных main из класса Использование переменных из другой структуры Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|