Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.11;
Скачать: CL | DM;

Вниз

Обьявление переменной в 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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.009 c
1-1274184276
Death_R
2010-05-18 16:04
2011.12.11
Access violation при Finalize(массив)


15-1313174177
Anatoly Podgoretsky
2011-08-12 22:36
2011.12.11
induc.2


2-1314799215
Васюня
2011-08-31 18:00
2011.12.11
Пожлуйста, как нати все файлы в папке!


15-1313870660
oleg1963lora
2011-08-21 00:04
2011.12.11
DDE-технология. Применимо ли это сейчас?


2-1314552284
Gu
2011-08-28 21:24
2011.12.11
Dll