119 / 107 / 29
Регистрация: 18.12.2010
Сообщений: 378
|
|
1 | |
Как сделать так, чтобы локальные переменные не обнулялись автоматически?08.01.2014, 13:01. Просмотров 1989. Ответов 15
Метки нет Все метки)
(
Сижу под Linux, использую Code::Blocks, компилятор gcc.
Я заметил одну неприятную вещь: когда я где-то забываю что-то обнулить, инициализировать какую-нибудь локальную переменную, компилятор, похоже, делает это за меня. Потом когда мой код запускают на другой реализации, все недочеты с инициализацией сразу проявляются в полной мере. Как сделать так, чтобы компилятор ничего не обнулял сам и чтобы ошибки такого рода я находил сразу?
0
|
|
08.01.2014, 13:01 | |
Как сделать так чтобы поле цена указывалась автоматически??? Как сделать так, чтобы значения выводили автоматически, а не вручную? Как сделать так чтобы подвал сайта автоматически съезжал вниз Как сделать так, чтобы сервер автоматически перезагружался раз в 12 часов? |
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
|
|
08.01.2014, 13:05 | 3 |
Никак! Локальные переменные - это переменные которые создаются в в памяти которую называют стек или автоматическая память. А стек он после окончания работы функции удаляет все созданные переменные. Хочешь что б не обнулялись создавай переменные в статической или динамической памяти!
Смысла нету локальным переменным не удаляться когда локальный код закончил работу?
0
|
119 / 107 / 29
Регистрация: 18.12.2010
Сообщений: 378
|
|
08.01.2014, 13:14 [ТС] | 4 |
В том-то вся и проблема, что ничего не говорит.
А это только под Linux или вообще везде? И что делать тогда? Локальные переменные очень нужны
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
|
|
08.01.2014, 13:22 | 5 |
Разберись какая память бывает! static память создаются глобальные переменные. динамическая выделяется динамически с помощью new и автоматическая которая выделяется для переменных в функциях ну например f(string s) s попадет в автопамять (стек) и удалиться после окончания работы функции. Ты вообще азов не знаешь даже.
Зачем они нужны? Ладно разбирайся. Локальные переменные нужны только на время работы функции, функция окончила свою работу они уже больше не нужны. Нато они и называются локальные, а ты наверно понятия подменяешь не понимая что такое локальная переменная.
1
|
1492 / 1138 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
08.01.2014, 13:25 | 7 |
компилятор не обнуляет. он ничего не делает. просто в стеке ячейку резервирует. и значение
ее зависит от того, что было в этой ячейке до инициализации. локальные переменные желательно всегда инициализировать. иногда бывают ворнинги об использовании переменной без инициализации, но на них лучше не полагаться. за этим нужно самому следить ну или в компиляторе найти какую-нибудь опцию, которая заставляла бы генерить ошибки в таких случаях. могут так компиляторы или нет - хз. зависит от компилятора. хотя и ворнинга обычно достаточно. код нужно писать так, чтобы и ворнингов не было.
0
|
5478 / 4873 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
08.01.2014, 13:28 | 8 |
Asker, ninja2 совсем о другом говорит, не по теме.
Добавлено через 1 минуту ninja2, проснись: Добавлено через 56 секунд Тема о том, что некоторые компиляторы (gcc) сами инициализируют неинициализированные переменные.
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
|
|
08.01.2014, 13:33 | 9 |
Что делать что делать? Самому нужно инициализировать, мой компилятор если напишешь int a; и запустишь программу, то выкинет предупреждение, а когда будет исполняться прога, то сразу вылет, приходится всегда инициализировать int a(0);
Возможно в codeblock есть где то настройки в которых можно это все настраивать...
0
|
119 / 107 / 29
Регистрация: 18.12.2010
Сообщений: 378
|
||||||
08.01.2014, 13:33 [ТС] | 10 | |||||
Спасибо!
Только что я не так сказал? ![]()
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
|
|
08.01.2014, 13:36 | 11 |
Все правильно. Молодец! Только глобальная и statiс это одна и таже память. int a попадет туда куда и static int b;
0
|
119 / 107 / 29
Регистрация: 18.12.2010
Сообщений: 378
|
|
08.01.2014, 13:38 [ТС] | 12 |
У меня ничего не выводит
![]()
0
|
3239 / 2047 / 350
Регистрация: 24.11.2012
Сообщений: 4,897
|
|
08.01.2014, 13:40 | 13 |
Asker, на скрине и лога компиляции нет, видно только запуск.
1
|
119 / 107 / 29
Регистрация: 18.12.2010
Сообщений: 378
|
|
08.01.2014, 13:52 [ТС] | 14 |
Всем спасибо, я все понял. Не стоит постоянно нажимать кнопку "Build and run"
![]() Перебилдил, warning появился
0
|
fasked
|
08.01.2014, 14:15
#15
|
Не по теме: Так часто делают при сборке в режиме отладки - записывают некоторые магические значения , чтобы проще было замечать реальные неинициализированные данные.
1
|
alsav22
|
|||||
08.01.2014, 14:58
Как сделать так, чтобы локальные переменные не обнулялись автоматически?
#16
|
|||||
Не по теме: Если бы только магические значения. Вот такой код:
1
|
08.01.2014, 14:58 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
08.01.2014, 14:58 |
Привет! Вот еще темы с ответами:
16
Как сделать так чтобы автоматически слова выстроились в одну строчку
Как сделать так, чтобы данные в прорамму с экрана забивались автоматически?
Как сделать так, чтобы файл с флешки открывался автоматически после её подключения?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |