|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||
Использование неинициализированных переменных18.08.2017, 12:52. Показов 4477. Ответов 41
Метки нет (Все метки)
Есть простой код
Но на stackoverflow разные мнения по поводу корректности использования не инициализированных переменных. Вот мне интересно следующее: 1. Какие могут быть проблемы? Ведь int по умолчанию имеет значение 0, и если не ошибаюсь это требование стандарта. 2. Почему компиляторы выдают warning при использовании неинициализированных переменных? Просто что бы напомнить об этом если вдруг мы случайно забудем инициализировать переменную перед тем как используем её? 3. 2017 студия вообще отказывается компилировать код в котором используются не инициализированные переменные. Это фича такая и как то отключается? Типа "не компилить если есть хотя бы 1 warning"? Прошу разъяснить тех кто знает Добавлено через 1 минуту Особенно интересует ответ на вопрос #1
0
|
||||||
| 18.08.2017, 12:52 | |
|
Ответы с готовыми решениями:
41
Предупреждения компилятора об использовании неинициализированных переменных
использование переменных |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||
| 18.08.2017, 13:07 | |||||
|
во многих кейсах. и обращают их внимание на потенциальную лажу. моральные люди ставят уровень предупреждений на максимум. в режиме: "все предупреждения приравнивать к ошибкам". аморальные - отключают фичу "предупреждать об опасности", специально, что бы можно было писать дурно пахнущий код. который, впрочем, работает так же, как выглядит.
1
|
|||||
|
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
|
|
| 18.08.2017, 13:10 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 18.08.2017, 13:18 [ТС] | |
|
hoggy,
А что там может быть непредсказуемого? Есть переменная, начальное значение которой равно нулю ![]() Можно плз пример? А то многие говорят что это плохо но почему именно не объясняется )А что стандарт говорит по этому поводу? еще не помню где, но читал что такая запись int n{} гарантирует то что переменная будет иметь значение 0, даже если явно не прописать. И warning-ов при такой записи не бывает. Если значения по умолчанию у int-a нет, то откуда берётся этот ноль?
0
|
|
|
Неэпический
|
||||||||||||||
| 18.08.2017, 13:24 | ||||||||||||||
Сообщение было отмечено Undisputed как решение
Решение
Добавлено через 26 секунд
3
|
||||||||||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||||||
| 18.08.2017, 13:25 | |||||||
|
Если бы у тебя в коде было написано
1
|
|||||||
|
Неэпический
|
|||||||
| 18.08.2017, 13:26 | |||||||
Сообщение было отмечено gru74ik как решение
Решение
2
|
|||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 18.08.2017, 13:33 | ||
|
2
|
||
|
18 / 17 / 16
Регистрация: 04.07.2017
Сообщений: 36
|
||||
| 18.08.2017, 13:35 | ||||
|
имеют значение по умолчанию
1
|
||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 18.08.2017, 13:41 [ТС] | |
|
Croessmah,
Спасибо что объяснили! Подскажите ещё плиз по следующим вопросам: 1. Выходит на значение по умолчанию можно расчитывать только если мы используем пользовательский тип (экземпляр класса с явно определенным конструктором по умолчанию?) 2. Если мы не определим конструктор по умолчанию и у класса есть поля например int, float тогда там тоже будет мусор независимо от того объект был создан в стеке или куче? 3. Какие значения принимают базовые типы при использовании фигурных скобок? Если долго перечислять то можно плз ссылку где можно об этом прочитать?
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||
| 18.08.2017, 13:56 [ТС] | ||||||
|
Quaentor,
Глобальный int это так?
0
|
||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 18.08.2017, 15:00 [ТС] | |
|
Croessmah,
Спасибо) Но вот тут я ни разу не понял http://rextester.com/RRJX62576 Как оно тру и фолс одновременно
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 18.08.2017, 15:23 | |
|
Undisputed, потому что true в С++ обычно компилируется как 1, а у тебя в байт переменной типа bool записывается 10 .
1 == 10 имеет значение false.
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 18.08.2017, 15:47 [ТС] | |
|
Croessmah,
В том случае где не тру и не фолс понятно т.к там бывает мусор который как бы не тру и не фолс... Данных вообще нет. Даже нулей... А здесь именно что есть данные, поэтому не понятно... TRam_, Сложно верится в такую интерпретацию, объясню почему: Фолс насколько я понимаю бывает только в том случае когда все биты нулевые(то есть число 0), во всех остальных случаях должно быть true, или не так? В данном случае мы записали в булеву переменную биты числа 10, а значит не все биты у нас нулевые. Поэтому не понятно почему сравнение с фолсом возвращает истину
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 18.08.2017, 16:16 | ||||||||
|
true == 1 false == 0 это вполне четко определенные константы в то время, как bool обычно занимает 1 байт. в 1 байте обычно 8 бит. это - 256 различных значений. если загнать по адресу булевой переменной всякий мусор (или просто оставить её не инициализированной) то в этом байте получим все что угодно, но скорее всего не 1 и не 0 true - все что не false. если мы сделаем:
0
|
||||||||
|
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
|
|
| 18.08.2017, 16:17 | |
|
Undisputed, Вы путаете два момента:
1) Когда само число интерпретируется, как логическое выражение. Если написать if (10), то получим истину, т.к. 10 != 0, и if(0) даст ложь 2) Когда происходит сравнение числа с чем-то, тогда логическим выражением будет результат сравнения. if (true == 10) даст ложь, т.к. 1 != 10. И if (false == 10) также даст ложь, ибо и 0 != 10 Ваша программка вообще-то не выведет ничего, т.к. оба условия ложны
2
|
|
| 18.08.2017, 16:17 | |
|
Помогаю со студенческими работами здесь
20
Использование файловых переменных Использование динамических переменных Использование динамических переменных Использование переменных main из класса Использование переменных из другой структуры Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|