Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
#1

Как сделать так, чтобы локальные переменные не обнулялись автоматически? - C++

08.01.2014, 13:01. Просмотров 715. Ответов 15
Метки нет (Все метки)

Сижу под Linux, использую Code::Blocks, компилятор gcc.

Я заметил одну неприятную вещь: когда я где-то забываю что-то обнулить, инициализировать какую-нибудь локальную переменную, компилятор, похоже, делает это за меня. Потом когда мой код запускают на другой реализации, все недочеты с инициализацией сразу проявляются в полной мере.

Как сделать так, чтобы компилятор ничего не обнулял сам и чтобы ошибки такого рода я находил сразу?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2014, 13:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать так, чтобы локальные переменные не обнулялись автоматически? (C++):

Как сделать так, чтобы данные в прорамму с экрана забивались автоматически? - C++
Друзья! Вопрос сложный, конечно. Я даже не знаю, с чего начать. (Может, даже не тот раздел) Прошу сильно не шпынять Имею небольшую...

Сделать так чтобы матрица заполнялась с клавиатуры, а не автоматически - C++
Нужно сделать так чтобы массив заполнялся с клавиатуры, а не автоматически. #include "stdafx.h" #include "stdio.h" #include...

Сделать так, чтобы функция возвращала как целые, так и дробные значения - C++
Задача: нужно найти среднее арифметическое чисел в одномерном массиве разных типов. В main() у пользователя спрашивается размер...

Как сделать чтобы приложение автоматически запускалось с заданными правами - C++
Здравствуйте. Как сделать чтобы при двойном клике на приложение оно сразу запускалось с заданными правами?

как в Code::Blocks просмотреть локальные переменные? - C++
знаю, что можно, а как - не знаю :( Добавлено через 15 часов 11 минут up...

Как сделать так,чтобы - C++
Собственно,здрасте. Собственно,я новичок в с++. В общем у меня возник вопрос: Сперва приведу пример,иначе не могу объяснить: int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 13:05 #2
Разве Code::Blocks не выдаёт предупреждения?
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
08.01.2014, 13:05 #3
Цитата Сообщение от Asker Посмотреть сообщение
Как сделать так, чтобы компилятор ничего не обнулял сам и чтобы ошибки такого рода я находил сразу?
Никак! Локальные переменные - это переменные которые создаются в в памяти которую называют стек или автоматическая память. А стек он после окончания работы функции удаляет все созданные переменные. Хочешь что б не обнулялись создавай переменные в статической или динамической памяти!

Смысла нету локальным переменным не удаляться когда локальный код закончил работу?
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
08.01.2014, 13:14  [ТС] #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Разве Code::Blocks не выдаёт предупреждения?
В том-то вся и проблема, что ничего не говорит.

Цитата Сообщение от ninja2 Посмотреть сообщение
А стек он после окончания работы функции удаляет все созданные переменные.
А это только под Linux или вообще везде?

Цитата Сообщение от ninja2 Посмотреть сообщение
Никак!
И что делать тогда? Локальные переменные очень нужны
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
08.01.2014, 13:22 #5
Цитата Сообщение от Asker Посмотреть сообщение
А это только под Linux или вообще везде?
Разберись какая память бывает! static память создаются глобальные переменные. динамическая выделяется динамически с помощью new и автоматическая которая выделяется для переменных в функциях ну например f(string s) s попадет в автопамять (стек) и удалиться после окончания работы функции. Ты вообще азов не знаешь даже.
Цитата Сообщение от Asker Посмотреть сообщение
И что делать тогда? Локальные переменные очень нужны
Зачем они нужны? Ладно разбирайся. Локальные переменные нужны только на время работы функции, функция окончила свою работу они уже больше не нужны. Нато они и называются локальные, а ты наверно понятия подменяешь не понимая что такое локальная переменная.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 13:24 #6
Цитата Сообщение от Asker Посмотреть сообщение
В том-то вся и проблема, что ничего не говорит.
Странно.
Миниатюры
Как сделать так, чтобы локальные переменные не обнулялись автоматически?  
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
08.01.2014, 13:25 #7
компилятор не обнуляет. он ничего не делает. просто в стеке ячейку резервирует. и значение
ее зависит от того, что было в этой ячейке до инициализации. локальные переменные желательно
всегда инициализировать. иногда бывают ворнинги об использовании переменной без инициализации,
но на них лучше не полагаться. за этим нужно самому следить ну или в компиляторе найти
какую-нибудь опцию, которая заставляла бы генерить ошибки в таких случаях. могут так компиляторы
или нет - хз. зависит от компилятора. хотя и ворнинга обычно достаточно. код нужно писать так,
чтобы и ворнингов не было.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 13:28 #8
Цитата Сообщение от Asker Посмотреть сообщение
И что делать тогда? Локальные переменные очень нужны
Asker, ninja2 совсем о другом говорит, не по теме.

Добавлено через 1 минуту
ninja2, проснись:
Цитата Сообщение от Asker Посмотреть сообщение
когда я где-то забываю что-то обнулить, инициализировать какую-нибудь локальную переменную, компилятор, похоже, делает это за меня.
Добавлено через 56 секунд
Тема о том, что некоторые компиляторы (gcc) сами инициализируют неинициализированные переменные.
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
08.01.2014, 13:33 #9
Что делать что делать? Самому нужно инициализировать, мой компилятор если напишешь int a; и запустишь программу, то выкинет предупреждение, а когда будет исполняться прога, то сразу вылет, приходится всегда инициализировать int a(0);

Возможно в codeblock есть где то настройки в которых можно это все настраивать...
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
08.01.2014, 13:33  [ТС] #10
Спасибо!


Цитата Сообщение от ninja2 Посмотреть сообщение
а ты наверно понятия подменяешь не понимая что такое локальная переменная.
Только что я не так сказал?
C++
1
2
3
4
5
6
7
8
...
int a; // глобальная
int main()
{
    int t; // локальная
    static int b; // статическая локальная переменная
    //...
}
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
08.01.2014, 13:36 #11
Цитата Сообщение от Asker Посмотреть сообщение
Только что я не так сказал?
Все правильно. Молодец! Только глобальная и statiс это одна и таже память. int a попадет туда куда и static int b;
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
08.01.2014, 13:38  [ТС] #12
У меня ничего не выводит
Миниатюры
Как сделать так, чтобы локальные переменные не обнулялись автоматически?  
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
08.01.2014, 13:40 #13
Asker, на скрине и лога компиляции нет, видно только запуск.
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
08.01.2014, 13:52  [ТС] #14
Всем спасибо, я все понял. Не стоит постоянно нажимать кнопку "Build and run"

Перебилдил, warning появился
fasked
08.01.2014, 14:15     Как сделать так, чтобы локальные переменные не обнулялись автоматически?
  #15

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Тема о том, что некоторые компиляторы (gcc) сами инициализируют неинициализированные переменные.
Так часто делают при сборке в режиме отладки - записывают некоторые магические значения , чтобы проще было замечать реальные неинициализированные данные.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2014, 14:15
Привет! Вот еще темы с ответами:

Можно ли как то сделать, чтобы программа сама создавала необходимые ей переменные, нужного типа? - C++
Привет :) Учу язык С++. Добрался до темы "Указатели". Теперь могу делать так, чтобы пользователь мог сам выбирать размер массива. ...

Как сделать, чтобы в окне программы при запуске переменные стояли на разных строках? - C++
как сделать что бы в окне программы(см. рисунок) при запуске,переменные (x1,y1,z1) и (x2,y2,z2) стояли на разных строках. Вот код...

Как сделать так, чтобы число не повторялось? - C++
Вопрос следующий. В определенном диапазоне (например от 0 до 9) лежат числа, нужно сделать так, чтобы весь диапазон был выведен на экран,...

Как сделать так, чтобы функции были не вложенными? - C++
получается так, что сначала у меня идет функция int main(), потом int sum, и потом int maxx. Они получаются вложенными в int main(). Как...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.01.2014, 14:15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru