![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
skrip |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 3.8.2006 Репутация: нет Всего: нет |
в файле file.txt есть две строки
ааа ааа ааа ввв ввв ввв не могу разобраться почему без помеченой знаками (!) строчке вторая строка не прибавляется в st, а с ней все работет замечательно.
|
|||
|
||||
likehood |
|
|||
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
надо инициализировать переменную ch в ф-ии read_string (например нулём).
иначе её значение после первого вызова read_string не сбрасывается и остается равным 10 |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
а также добавить условие окончания файла. например
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
не согласен ch локальная переменная и после выхода из ф-ии перестает существовать, а при входе заново создается.. Просто компилятор постоянно "глючит" если пытается использовать неинициализированную переменную
|
||||
|
|||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 8 Всего: 158 |
vinter, согласен ты или не согласен, но при последовательном вызове одной и той же функции с неинициализированными стековыми переменными, значения оных с большой долей вероятности будут сохраняться от предыдущих вызовов.
Добавлено @ 18:31 понятия "перестает существовать" и "заново создается" существуют только в теории. на практике все несколько иначе. |
|||
|
||||
vinter |
|
||||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
конечно же вероятность существует, только очень призрачная.. Специально проверил ,5 раз вызывад ф-ю и не разу она не повторил значение переменной которым была проин. переменная внутри ф-ии!!!Неиниц. переменная помещается в регистр ,а не вынемается из него так что вероятность очень мала ![]() Слышали про такое понятие "Время жизни переменной"??
Конечно же разработчики компиляторов подлые лгуны, а книги пишут полные ламеры ![]()
не раскажете как?? Это сообщение отредактировал(а) vinter - 9.8.2006, 19:17 |
||||||
|
|||||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
стековая память для переменной не обнуляется, изменяется только указатель стека а для объектоа классов компилятором генерируется вызов деструктора в месте выхода его за область видимости в данном случае происходит
то есть сами данные неизменны, изменяется SP, значение ch сохраняется при втором вызове так что baronp прав Добавлено @ 20:28
в случае с POD-типами - просто изменение SP и контроль за использованием вне области видимости на этапе компиляции в случае с объектами - вызов деструктора -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
А стек тут причем??? неинициализированная переменная помещается не в стек , А в РЕГИСТР
|
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
где написано? а тут
регистров не хватит ![]() объекты тоже в регистры засовывать? ![]() Это сообщение отредактировал(а) MAKCim - 9.8.2006, 20:38 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
Мы же говорим о конкретном примере.. Оптимизтрующий компилятор при обьявлении одной переменной скорее всего положит ее в регистр(для экономии времени).Не ну если много тогда конечно в стек...Но мы то имеем всего одну переменную...
А это что такое(просто не знаю)? |
|||
|
||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
спорный вопрос все-таки...
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 8 Всего: 158 |
vinter, как бы это так помягче-то?... в общем, ты высказал немало утверждений(причем зачастую излишне эмоционально, да еще и сразу в двух темах), которые с действительностью никак не пересекаются.
это зависит от компилятора, параметров компиляции, от того, как переменная используется, какого она типа, модели вызова функции итд итп. а если уж речь зашла о конкретном случае, то компилятор никогда не "соптимизирует" переменную ch в регистр, ибо как-то так сложилось, что в качестве буфера для приема данных регистры не используются. |
|||
|
||||
vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
dumb мы на "ты" не переходили
![]() почитайте вот это
можно узнать откуда такие сведения(для собственного просвещения)
где это? то что я назвал "инициализацией " немного другой процесс(что то я нигде не встречал стандарта по названиям), многие даже именитые авторы книг по программированию называют разными словами одинаковые вещи?? в сущности я не был неправ... |
||||
|
|||||
En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
vinter,
Прикрепи сюда ассемблерный листинг этой программы твоего компилятора, тогда и спорам конец. |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
вот есть кусок кода:
попробуйте посмотрите при отладке значение переменной...у меня оно ни разу не установилось в 10 при опред. без инициализации |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |