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

Вниз

Нашел одну вещь в Delphi   Найти похожие ветки 

 
iZEN ©   (2004-11-14 02:41) [40]

Напомните, пожалуйста, компилятор TurboPascal/Delphi отлавливает такую ситуацию:

unit Module1;

interface

procedure TestString(var s: String);

implementation

procedure TestString(var s: String);
begin
 s := s + " in Module1";
end;

end.

И ещё один модуль:

unit Module2;

interface

procedure TestString(var s: String);

implementation

procedure TestString(var s: String);
begin
 s := s + " in Module2";
end;

end.

Программа:

program DemoTest;

uses Module1, Module2;

var
 s: String;
begin
 s := "Test String";
 TestString(s);(* Module1.TestString(s) или Module2.TestString(s)??? *)
end.


 
iZEN ©   (2004-11-14 02:49) [41]

Проверил тест (iZEN ©   (14.11.04 02:41) [40]) только что.

Delphi7 НЕ ОТЛАВЛИВАЕТ И КОМПИЛИРУЕТ БЕЗ ПРЕДУПРЕЖДЕНИЙ!!!

Даже не зависит от порядка объявления:
uses Module1, Module2;
и
uses Module2, Module1;
процедура TestString всегда вызывается из Module1.

Вот такая неоднозначность.


 
iZEN ©   (2004-11-14 02:58) [42]

Причём процедура какого модуля вызовется, зависит от очерёдности создания модулей в проекте Delphi, а не в объявлении uses, что не есть хорошо в плане определения языка. Выходит, что среда Delphi не слабо влияет на язык.


 
iZEN ©   (2004-11-14 03:01) [43]

(iZEN ©   (14.11.04 02:58) [42])
Какие-то глюки пошли, всё равно вызывается Module1.TestString.

Я ОФИГЕВАЮ.


 
GuAV ©   (2004-11-14 03:07) [44]

2 iZEN

А может это потому что они перечисленны и в dpr и в модуле ? и где-то перестваил Module2 <-> Module1 а где-то нет ?


 
iZEN ©   (2004-11-14 03:15) [45]

uses Module1, Module2;
BuildAll, запускаю: Test String in Module1.
Вроде отлично.

Исключаю из проекта Modul1, затираю исходники Modul1, уничтожаю все dcu, убираю в uses ссылку на него: uses Module2;
Project -> BuildAll -> Run: Test String in Module2.
Вроде отлично.

File -> New -> Unit -> редактирую -> SaveAs "Module1"
Добавляю в uses ссылку: uses Module1, Module2;
BuildAll, запускаю: Test String in Module2.
Глюк? (1)

Комментирую в uses ссылку: uses Module1;//, Module2;
Project -> BuildAll -> Run: Test String in Module1.
Отлично.

Меняю местами в uses ссылки: uses Module2, Module1;
Project -> BuildAll -> Run: Test String in Module1.
Глюк? (2)

Что это? Где логика между Глюками (1) и (2)? Лично я не нахожу причин от чего зависит поведение программы.


 
iZEN ©   (2004-11-14 03:18) [46]

to GuAV ©   (14.11.04 03:07) [44]
АБСОЛЮТНО нет связи между порядком перечисления и выполнением.


 
iZEN ©   (2004-11-14 03:34) [47]

В консольном приложении есть связь между порядком перечисления в uses и выполнением: выполняется процедура, объявленная в модуле, стоящим последним в списке uses.


 
iZEN ©   (2004-11-14 03:50) [48]

В оконном приложении так же.

Так что прошу прощения за "глюки".


 
Piter ©   (2004-11-14 14:47) [49]

Игорь Шевченко ©   (14.11.04 1:20) [27]
> И ?
> IMHO это сюда не при чём. TestFunc(string("test")) всё равно
> вызовет PChar функцию.

Я надеюсь, это проверено, и все преобразования аргументов в случае такого вызова можно выложить в студию ?


Игорь, ну а вы опять не верите? Проверено, проверено. Вызывается PChar версия функции...

Игорь Шевченко ©   (14.11.04 1:23) [29]
делается ли в случае PChar(StringValue) уникальный экземпляз строки.


ух ты, странно что не помните. Не делается, конечно. PChar начинает указывать на первый символ AnsiString - @s[1]
А вот при обратном преобразовании конечно же создается копия, ибо AnsiString никак не может указывать просто на какой-то символ, должна быть еще структура служебная (ну там счетчик ссылок, длина, размер структуры...)



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

Форум: "Потрепаться";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.036 c
1-1100447291
M@D
2004-11-14 18:48
2004.11.28
TMenuItem?


14-1099857617
VID
2004-11-07 23:00
2004.11.28
Рассказ "Гости"


14-1099931906
Piter
2004-11-08 19:38
2004.11.28
Интересно, почему работает следующий код :)


14-1099843388
Knight
2004-11-07 19:03
2004.11.28
Не могу настроить сеть на виртуальной машине под Virtual PC...


3-1098267203
GanibalLector
2004-10-20 14:13
2004.11.28
решение проблемы обрыва коннекта в IBX





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский