Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2011, 18:10   #1
AlexDn
Пользователь
 
Регистрация: 02.10.2009
Сообщений: 93
По умолчанию Обьявление переменной в var

Как то я засомневался в одном вопросе.. вот если переменная обьявляется в блоке var, например:
Код:
var p:real;
присваивается ли ей автоматически значение 0..?
Или в коде нужно писать:
Код:
var x,y:real
begin
x:=0;
y:=0;
тра-та-та..
Как правильно?..
AlexDn вне форума Ответить с цитированием
Старый 22.08.2011, 18:19   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

если переменная глобальная то можно написать
Код:
var
  p: real = 0;
а если они локальные, то лучше перестраховаться и обнулить самому
ZuBy вне форума Ответить с цитированием
Старый 22.08.2011, 18:21   #3
DenNik2006
Пользователь
 
Аватар для DenNik2006
 
Регистрация: 27.07.2011
Сообщений: 71
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
если переменная глобальная то можно написать
Код:
var
  p: real = 0;
а если они локальные, то лучше перестраховаться и обнулить самому
наоборот, если переменная глобальная, она по-умолчанию инициализируется нулем, или пустой строкой (если тип строка), или nil, если тип указатель
Техника несовершенна: компьютеру, чтобы прийти в себя, нужно три пальца, человеку - всего два!
DenNik2006 вне форума Ответить с цитированием
Старый 22.08.2011, 18:25   #4
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
наоборот, если переменная глобальная, она по-умолчанию инициализируется нулем, или пустой строкой (если тип строка), или nil, если тип указатель
хм, не знал
ZuBy вне форума Ответить с цитированием
Старый 22.08.2011, 19:15   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

AlexDn

Цитата:
Сообщение от AlexDn
Или в коде нужно писать:
именно.
Delphi более терпима к использованию неиницилизирвоанных переменных.
И DenNik2006 прав.
Но!
Вы, как программист ДОЛЖНЫ проиницилизировать переменную, если собираетесь к ней обращаться далее на чтение..


p.s. далеко не всегда переменную нужно иницилизировать нулём, это от алгоритма зависит!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.08.2011, 21:33   #6
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Код:
..
implementation
var N: Integer;
Чему будет равна N при первом же обращении к ней по чтению ?
Она ни разу не глобальная.
И не локальная тоже.
И не обязана быть равна нулю в общем случае.
Ибо упомянутой инициализацией заведует линкер. А дельфийский линкер - не единственный во Вселенной линкер.

Правильный ответ такой: если переменная статическая, то она будет инициализирована ожидаемым образом только в случае использования конкретного линкера.
mss вне форума Ответить с цитированием
Старый 22.08.2011, 21:41   #7
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Код:
..
implementation
var N: Integer;
Чему будет равна N при первом же обращении к ней по чтению ?
Она ни разу не глобальная.
И не локальная тоже.
И не обязана быть равна нулю в общем случае.
Ибо упомянутой инициализацией заведует линкер. А дельфийский линкер - не единственный во Вселенной линкер.

Правильный ответ такой: если переменная статическая, то она будет инициализирована ожидаемым образом только в случае использования конкретного линкера.
в первый раз слышу про "статическую" перменную в Delphi.
Лично я, всегда делаю инициализацию значения переменной.
Мне кажется что вы вводите в заблуждение кодеров, про статические переменные.
Если в документации сказано, что глобальные переменные инициализируются нулевыми значениями, то оно так и есть, для тех кто сомневается (да и для всех полезно) смотрим на значение глобальных переменных в отладчике. А ссылкаться на то, что некоторые компонеты могут быть заменены это смешно.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 22.08.2011 в 21:48.
chertovich вне форума Ответить с цитированием
Старый 22.08.2011, 22:06   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это сказано в документации по Делфи.
вы уверены что так же будет везде?(а ведь есть например Лазарус)
всегда лучше инициализировать явно.
Цитата:
в первый раз слышу про "статическую" перменную в Delphi.
имеется в виду переменная не являющая ни локальной, ни полем класса.

не нужно полагаться на компилятор.
(кстати вообще то это поведение компилятора, а не линкера, ибо он считает что если переменной не присвоено начальное значение то она равна 0/nil)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.08.2011, 03:59   #9
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

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

но это так, чисто мои философские размышления =)

кстати, все стринги, которые я когда-либо создавал были равны '' (пусто),
а еще я как-то создал массив интегров, и по невнимательности пытался его читать,
предварительно не записав туда данные - ну так вот, читалась всякая хрень,
всегда разная - очень похоже на то что я описал выше.
xrob вне форума Ответить с цитированием
Старый 23.08.2011, 04:33   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
а я где-то читал что все типы в делфи так или иначе - указатели.
вы наверно спутали с классами, объекты в Делфи всегда хранятся по ссылке/указателю.(ну и локальные переменные, но там стек виноват)
Цитата:
а еще я как-то создал массив интегров, и по невнимательности пытался его читать,
предварительно не записав туда данные - ну так вот, читалась всякая хрень,
всегда разная - очень похоже на то что я описал выше.
дин массив есть указатель на данные.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обьявление глобальной функции Scorpeon Общие вопросы Delphi 3 22.04.2010 11:11
Обьявление массива bondik Общие вопросы C/C++ 1 31.03.2009 19:09
обьявление классов пыхонин филипп Помощь студентам 1 21.03.2009 20:10
var Черничный Общие вопросы Delphi 9 25.06.2008 17:10
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) Arkuz Общие вопросы Delphi 12 25.09.2007 20:47