|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.09.2010, 15:56 | #1 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 127
|
Инициализация
Здравствуйте. Недавно возникла такая ситуация: если объявить глобальную переменную, а потом выполнить какие-нибудь математические действия над ней (r:=r*2), то в результате переменная будет равна 0. А если эту переменную объявить в обработчике событий, то при той же математической операции результат будет неопределённый. Почему???
Код:
Последний раз редактировалось Aleksey1989; 10.09.2010 в 15:58. |
10.09.2010, 15:59 | #2 | |
Made In USSR!
Старожил
Регистрация: 01.09.2010
Сообщений: 3,657
|
Цитата:
а можно текст этой функи поглядеть?
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой" |
|
10.09.2010, 16:27 | #3 |
Пользователь
Регистрация: 23.05.2009
Сообщений: 59
|
а ничего что Вы изначально умножаете 0 на 2? Естественно и должен получиться 0:
Код:
|
10.09.2010, 16:44 | #4 |
Баламучу слегка...
Участник клуба
Регистрация: 01.11.2006
Сообщений: 1,585
|
Nater, читайте ВНИМАТЕЛЬНО вопрос и отвечайте по существу.
|
10.09.2010, 17:10 | #5 |
Участник клуба
Регистрация: 07.07.2007
Сообщений: 1,518
|
Она и без математических действий глобальная Double выдаст 0, а объявленная внутри процедуры 1.804231708851E-307.
Помню в какой-то программе у меня не работал sql-запрос select * from table where id=[число] Пришлось написать select * from table where (id>=[число]) and (id<[число+1]) Воистину так устроен мир |
11.09.2010, 08:36 | #6 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,758
|
Потому что локальные переменные компилятор не обязан обнулять.
|
11.09.2010, 14:01 | #7 | |
!=
Участник клуба
Регистрация: 08.09.2008
Сообщений: 1,751
|
При объявлении локальной переменной значение ей не задаётся
Цитата:
|
|
11.09.2010, 15:08 | #8 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,758
|
2 vovk
К чему был ваш пост, смысловополностью повторяющий мой? Цитата:
|
|
11.09.2010, 15:23 | #9 |
!=
Участник клуба
Регистрация: 08.09.2008
Сообщений: 1,751
|
|
11.09.2010, 15:36 | #10 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
на самом деле, компилятор и глобальные переменные НЕ ОБЯЗАН обнулять! Иницилизировать переменные перед их использованием - святое дело программиста.
Но, с самых первых версий Delphi действительно обнуляет глобальные переменные. И даже в документации было об этом сказано. Дословно не помню, но приблизительно так: в настоящей версии Delphi происходит обнуление глобальных переменных, ..... Однако, разработчики НЕ ГАРАНТИРУЮТ, что в будущих версиях среды разработки/компилятора это будет так же! а ещё, некоторые продвинутые ЯП (например, тот же .NET) не дадут использовать переменную, если она не иницилизированна. Что, имхо, АБСОЛЮТНО правильно! |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Меню, инициализация | Krumyura | Общие вопросы C/C++ | 4 | 22.03.2010 18:14 |
Ошибка инициализация | Krumyura | Общие вопросы C/C++ | 2 | 22.03.2010 14:08 |
Инициализация | Krumyura | Общие вопросы C/C++ | 5 | 20.03.2010 23:37 |
Инициализация Glut | windzor | Общие вопросы .NET | 2 | 07.02.2010 12:17 |
Инициализация окна | Anny | Общие вопросы Delphi | 9 | 13.03.2007 11:48 |