Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> если функция ничего не возвращает 
:(
    Опции темы
Poseidon
Дата 16.9.2012, 03:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(БелАмор @  15.9.2012,  20:20 Найти цитируемый пост)
Про юникодные версии я пока воздержусь высказывать мнение, но на неюникодных до сих пор удавалось придерживаться правила "ни одного предупреждения при компиляции".
До D2010 мне тоже удавалось. Теперь уже никак. Эх, где мой любимый D7...


Цитата(bems @  15.9.2012,  20:10 Найти цитируемый пост)
если и будет, то это случайность

Блин. почему мне с такой случайностью не везет в лотерее?
Код
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

function StrFunc(param: string): string;
var
  a: string;
begin
  a:= param;
end;

function IntFunc(param: Integer): Integer;
var
  a: integer;
begin
  a:= param;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(StrFunc('ahaha')); // Постоянно возвращает пустую строку
  ShowMessage(IntToStr(IntFunc(0))); // Постоянно возвращает -1
end;

end.


Хотя я еще раз повторюсь, что это все не правильно



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
bems
Дата 16.9.2012, 04:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Poseidon, не надо блинов.

Цитата(Poseidon @  16.9.2012,  03:00 Найти цитируемый пост)
Постоянно возвращает -1

с каких пор -1 это "значение по умолчанию для указанного типа"? это мусор со стека (окей, компилятор может выкинуть переменную на стеке и заменить регистром, но сути дела это не меняет). И другим он будет если переменная Result будет попадать на другое место на стеке, или то же место будет содержать другой мусор. Нет причин ожидать там мифическое "значение по умолчанию"
у меня твой пример показывает не -1 а 0, а если поменять вызовы ShowMessage местами то 3211600

Цитата(Poseidon @  16.9.2012,  03:00 Найти цитируемый пост)
Постоянно возвращает пустую строку

для автоматических типов компилятор следит за значениями по умолчанию переменной Result. Это необходимо потому что если вместо строки туда попадет мусор со стека, то ты уже не сможешь присвоить туда что-то своё (потому что для этого нужно уменьшить счетчик ссылок на старую строку, а она - мусор). но при этом не гарантируется что там пустая строка. гарантируется только что там корректное строковое значение. Но какое именно - опять случайность. Модифицируй свой пример, и посмотри что получится 
Код

procedure TForm11.Button1Click(Sender: TObject);
var
  s: String;
begin
  s := 'wtf??';
  s := StrFunc('ahaha');
  ShowMessage(s); // выводит "wtf??", пока дождь не пойдет
end;



--------------------
Обижено школьников: 8
PM MAIL   Вверх
БелАмор
Дата 16.9.2012, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 7
Всего: 17



Цитата(Poseidon @  16.9.2012,  04:00 Найти цитируемый пост)
ShowMessage(StrFunc('ahaha')); // Постоянно возвращает пустую строку

А у меня вот этот код:

Код

function StrFunc(param: string): string;
begin
  if Length(param) > 5 then
    Result := param;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s := 'Ну что? Не ждали?';
  s := StrFunc('ahaha');
  ShowMessage(s);
end;

Всегда выдаёт:

Цитата

---------------------------
Project1
---------------------------
Ну что? Не ждали?
---------------------------
OK   
---------------------------

Причём, что самое смешное, это - документированное поведение.
На всякий случай повторю ссылку:
http://delphikingdom.com/asp/viewitem.asp?catalogid=1435

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



Это сообщение отредактировал(а) БелАмор - 16.9.2012, 11:36
PM   Вверх
БелАмор
Дата 16.9.2012, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 7
Всего: 17



Цитата(БелАмор @  16.9.2012,  08:00 Найти цитируемый пост)
  s := 'Ну что? Не ждали?';
  s := StrFunc('ahaha');
  ShowMessage(s);

Хотел написать так:

Код

  s := StrFunc('Ну что? Не ждали?');
  s := StrFunc('ahaha');
  ShowMessage(s);

Но результат одинаков, не стал исправлять.
Если кто пойдёт по ссылке - там внизу ещё ссылка на обсуждение.

PM   Вверх
БелАмор
Дата 16.9.2012, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 7
Всего: 17



Что-то я прозевал сообщение от bems и практически повторил приведённый им код...

PM   Вверх
bems
Дата 16.9.2012, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(БелАмор @  16.9.2012,  07:31 Найти цитируемый пост)
Но результат одинаков

не одинаков, кстати 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
БелАмор
Дата 16.9.2012, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 7
Всего: 17



Цитата(bems @  16.9.2012,  14:43 Найти цитируемый пост)
не одинаков, кстати

Под результатом я понимал выдаваемое сообщение. Оно одинаково.
Возможно, вы не обратили внимание на то, что у меня другой вариант StrFunc.

PM   Вверх
bems
Дата 16.9.2012, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



да, не обратил, извиняюсь


--------------------
Обижено школьников: 8
PM MAIL   Вверх
northener
Дата 17.9.2012, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Poseidon @  16.9.2012,  03:00 Найти цитируемый пост)
Блин. почему мне с такой случайностью не везет в лотерее?

Хороший вопрос!
Ответ может быть только один. Никогда не играйте ни в какую лотерею! Помните, что выигрыш всегда гарантирован только устроителям сей лотереи. А всем прочим (в массе своей) гарантирован проигрыш!
smile

А по сути вопроса автора согласен с высказываниями БелАмор от 15.9.2012, 16:35
P.S. Простите. До сих пор не научился давать в своём ответе ссылку на конкретный ответ в теме/ветке. Если кто может что подсказать, то прошу сообщить в личку.

Это сообщение отредактировал(а) northener - 17.9.2012, 00:56


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0790 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.