Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];

Вниз

Обьявление переменной в var   Найти похожие ветки 

 
alexdn ©   (2011-08-22 18:30) [0]

Как то я засомневался в одном вопросе.. вот если переменная обьявляется в блоке var, например:
var p:real;
присваивается ли ей автоматически значение 0..?
Или в коде нужно писать:
var x,y:real
begin
x:=0;
y:=0;
тра-та-та..

говорят есть разница между глобальными и локальными переменными.


 
Antoxa   (2011-08-22 18:53) [1]

Если объявил,то нужно инициализировать переменную:
var x,y:real
begin
x:=0;
y:=0;
тра-та-та.. :)


 
int64 ©   (2011-08-22 18:55) [2]

Варнинги и хинты это не просто так.


 
alexdn ©   (2011-08-22 19:18) [3]

> Antoxa   (22.08.11 18:53) [1]
что то не верю я тебе:)


 
Dimka Maslov ©   (2011-08-22 19:21) [4]

Ноль присваивается только полям класса. Внутренним переменным процедур и функций - что было в том месте стека, то и будет значением переменной. Глобальные переменные вроде тоже изначально обнуляются, но лучше явно задать им начальное значение.


 
alexdn ©   (2011-08-22 19:28) [5]

> Dimka Maslov ©   (22.08.11 19:21) [4]
ладно, совсем делитантский вопрос - а что было в том месте стека?..


 
Inovet ©   (2011-08-22 19:41) [6]

> [5] alexdn ©   (22.08.11 19:28)
> а что было в том месте стека?..

Всё что угодно, считай мусор.


 
Юрий Зотов ©   (2011-08-22 20:02) [7]


> говорят есть разница между глобальными и локальными переменными

Правильно говорят. Глобальные - обнуляются, локальные - нет.


 
Ega23 ©   (2011-08-22 20:05) [8]


> alexdn ©   (22.08.11 19:18) [3]
>
> > Antoxa   (22.08.11 18:53) [1]
> что то не верю я тебе:)


А проверить?


unit Unit9;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm9 = class(TForm)
   Memo1: TMemo;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form9: TForm9;

implementation

{$R *.dfm}

function Foo: string;
begin
 Result := Result + "0";
end;

procedure TForm9.Button1Click(Sender: TObject);
var
 i: Integer;
begin
Memo1.Clear;
 for i := 1 to 10 do
  Memo1.Lines.Add(Foo);
end;

end.


 
Игорь Шевченко ©   (2011-08-22 20:10) [9]

метлу купи - тебе самое оно


 
alexdn ©   (2011-08-22 20:25) [10]

> Игорь Шевченко ©   (22.08.11 20:10) [9]
повторенье мать ученья!..


 
sniknik ©   (2011-08-22 20:33) [11]

> Глобальные переменные вроде тоже изначально обнуляются, но лучше явно задать им начальное значение.
в винде обнуляются, под вайном нет. нарывался...


 
Inovet ©   (2011-08-22 20:53) [12]

> [11] sniknik ©   (22.08.11 20:33)
> в винде обнуляются, под вайном нет. нарывался...

Во как. Это что же в Вайне финкции Вин АПИ неверно реализованы.


 
Игорь Шевченко ©   (2011-08-22 21:24) [13]


> Это что же в Вайне финкции Вин АПИ неверно реализованы.


нет это загрузчик не чистит тот сегмент, где delphi располагает глобальные переменные


 
alexdn ©   (2011-08-22 21:53) [14]

> Игорь Шевченко ©   (22.08.11 21:24) [13]
линкер имеется в виду?


 
sniknik ©   (2011-08-22 22:02) [15]

имеется в виду загрузчик.


 
Sha ©   (2011-08-22 22:52) [16]

также имеется в виду сегмент, delphi и глобальные переменные.


 
Rouse_ ©   (2011-08-22 23:42) [17]

Кстати вот это утверждение тоже верно:

> Inovet ©   (22.08.11 20:53) [12]
>  Это что же в Вайне финкции Вин АПИ неверно реализованы.


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


 
Antoxa   (2011-08-23 12:44) [18]

Неужели так сложно задать начальные значения нужным переменным? Об этом сам компилятор предупреждает кстати! Лучше разговоры разводить надо это делать или нет,а потом глюки ловить в проге? Если много переменных, напиши комментарии какая для чего и будет тебе счастье ;)


 
Dimka Maslov ©   (2011-08-23 13:17) [19]


> ладно, совсем делитантский вопрос - а что было в том месте
> стека?.


Адреса точек входа в функции, их локальные переменные и прочая, прочая, прочая


 
Inovet ©   (2011-08-23 14:07) [20]

> [19] Dimka Maslov ©   (23.08.11 13:17)
> Адреса точек входа в функции

Адреса возвратов.


 
Jeer ©   (2011-08-23 14:41) [21]


> Inovet ©   (23.08.11 14:07) [20]
> Адреса возвратов.


Это смотря откуда смотреть - в пещеру или из пещеры :)


 
DiamondShark ©   (2011-08-24 01:11) [22]


> Об этом сам компилятор предупреждает кстати!

Экий же он тупой, этот ваш компилятор. На предупреждения его хватает, а на инициализацию -- уже нет.


 
Rouse_ ©   (2011-08-24 01:28) [23]


> DiamondShark ©   (24.08.11 01:11) [22]
> Экий же он тупой, этот ваш компилятор.

Поподробнее можно?


 
Германн ©   (2011-08-24 01:57) [24]


> DiamondShark ©   (24.08.11 01:11) [22]
>
>
> > Об этом сам компилятор предупреждает кстати!
>
> Экий же он тупой, этот ваш компилятор. На предупреждения
> его хватает, а на инициализацию -- уже нет.
>

Ну если компилятор начнёт заниматься инициализацией "всегда и везде", то ...
Ну для  батонокидателей  это будет самое-то! А для всех прочих?


 
Eraser ©   (2011-08-24 02:57) [25]

> [17] Rouse_ ©   (22.08.11 23:42)


> Последнее время часто контактирую в разработчиками Wine,
> с некоторыми моментами есть проблемы

это да, но тем не менее последние несколько лет вайн стал куда стабильнее.


 
Германн ©   (2011-08-24 03:10) [26]

Может быть именно поэтому.


 
DiamondShark ©   (2011-08-25 23:59) [27]


> Rouse_ ©   (24.08.11 01:28) [23]
> Поподробнее можно?

Можно.
Если разработчик компилятора:
1. смог из анализа текста сделать вывод о наличии неинициализированной переменной;
2. отдаёт себе отчёт в том, что это аномальный код (с логической ошибкой) -- ведь варнинг-то печатается;
3. позволяет, тем не менее, сгенерировать и запустить машинный код (заведомо неверный!),
то у разработчика абсолютно взорван мозг.

Одновременного наличия варнинга и генерации машинного кода быть не может. Может быть одно из двух:
1. Компиляция завершается с ошибкой.
2. Компилятор генерирует инициализацию.


 
Германн ©   (2011-08-26 00:50) [28]


> DiamondShark ©   (25.08.11 23:59) [27]


> Одновременного наличия варнинга и генерации машинного кода
> быть не может. Может быть одно из двух:
> 1. Компиляция завершается с ошибкой.
> 2. Компилятор генерирует инициализацию.
>

Это ты про что?
Warning  не означает наличие какой-то ошибки, которую не может разрешить компилятор. Он только предупреждает, что не уверен в том, что код скомпилированный им будет 100% рабочим.


 
Германн ©   (2011-08-26 00:50) [29]


> DiamondShark ©   (25.08.11 23:59) [27]


> Одновременного наличия варнинга и генерации машинного кода
> быть не может. Может быть одно из двух:
> 1. Компиляция завершается с ошибкой.
> 2. Компилятор генерирует инициализацию.
>

Это ты про что?
Warning  не означает наличие какой-то ошибки, которую не может разрешить компилятор. Он только предупреждает, что не уверен в том, что код скомпилированный им будет 100% рабочим.


 
alexdn ©   (2011-08-26 00:54) [30]

> DiamondShark ©   (25.08.11 23:59) [27]
> код (заведомо неверный!),
почему, ну простаивает переменная, ну и что


 
Германн ©   (2011-08-26 01:06) [31]


> alexdn ©   (26.08.11 00:54) [30]
>
> > DiamondShark ©   (25.08.11 23:59) [27]
> > код (заведомо неверный!),
> почему, ну простаивает переменная, ну и что

"простаивает" переменная.
Это что-то новое! :)


 
alexdn ©   (2011-08-26 01:48) [32]

> Германн ©   (26.08.11 01:06) [31]
это я к тому что не люблю подтирать "сопли" в коде..


 
Германн ©   (2011-08-26 01:54) [33]


> > Германн ©   (26.08.11 01:06) [31]
> это я к тому что не люблю подтирать "сопли" в коде..
>

В каком коде какие сопли?


 
Дмитрий С ©   (2011-08-26 05:12) [34]


> DiamondShark ©   (25.08.11 23:59) [27]
>
>

Переменную можно по-разному проинициализировать, и так что компилятор не догадается. Например

program Project3;
{$APPTYPE CONSOLE}
var
 A: Integer;
begin
 A := A xor A;
 Writeln(A);
end.


 
Омлет ©   (2011-08-26 08:51) [35]

> Дмитрий С ©   (26.08.11 05:12) [34]

Ещё можно ходить спиной вперед.


 
Anatoly Podgoretsky ©   (2011-08-26 09:41) [36]

> DiamondShark  (25.08.2011 23:59:27)  [27]

Неверно, может, а не может быть при условии ошибки ERROR, ну так код и не
генерируется.


 
Anatoly Podgoretsky ©   (2011-08-26 09:43) [37]

> Дмитрий С  (26.08.2011 05:12:34)  [34]

Неужели не догадается, что A := это инициализация?


 
sniknik ©   (2011-08-26 09:52) [38]

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


 
Омлет ©   (2011-08-26 10:04) [39]

> sniknik ©   (26.08.11 09:52) [38]
> и???


И тогда можно будет всем не знать правил )


 
sniknik ©   (2011-08-26 10:23) [40]

что это меняет для вопроса как?

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



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.004 c
15-1313675656
Andy BitOff
2011-08-18 17:54
2011.12.11
Протокол обмена с весами CAS AD-25


4-1242382646
Игорь
2009-05-15 14:17
2011.12.11
Функция IsProcessInJob в Windows 2000


4-1252784613
Ruzzz
2009-09-12 23:43
2011.12.11
Фишки Vista/Win7 в Delphi (типа прогресс в панеле задач)


2-1314272162
И. Павел
2011-08-25 15:36
2011.12.11
Deadlock при запросе на выборку в программе без явных блокировок


15-1314088885
xayam
2011-08-23 12:41
2011.12.11
Переключатель на светильник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский