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

Вниз

Загадочный system   Найти похожие ветки 

 
vertal ©   (2004-05-23 02:09) [0]

Что из себя представляют функции , определенные в модуле system?
(Речь не о Break или continue , а о "нормальных" функциях).В частности , почему не работает

Var
 p:Pointer;
Begin
 p:=@cos;
...


 
Ihor Osov'yak ©   (2004-05-23 03:30) [1]

часть из них "functions & procedures that need compiler magic "
втч cos aka procedure _COS;


 
Юрий Зотов ©   (2004-05-23 05:00) [2]

> vertal ©   (23.05.04 02:09)  

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


 
vertal ©   (2004-05-23 12:43) [3]

> Такие функции - это стандартная библиотека языка.
Это как раз понятно , хотя вообще-то по-моему правильнее оставить язык программирования только языком с "голым" синтаксисом , а если необходимо использовать какие-то функции , то подключать соотв. модули (так как я могу судить и сделано в C/C++), то есть как-то криво смотрится факт подключения по умолчанию system , даже если его и нет в Uses.
>Их реальные имена могут отличаться от тех, под которыми они описаны в документации.
А можно ли как-то все-таки получить адрес такой процедуры/функции (иногда требуется)?Я попробовал с несколькими функциями из system , но ни с одной не получилось. С другими модулями и моими функциями оператор @ работает без проблем.


 
Anatoly Podgoretsky ©   (2004-05-23 12:52) [4]

vertal ©   (23.05.04 12:43) [3]
Для Паскаля вообще то достаточно, поскольку включает ввод/вывод. Могли бы встроить, а часть встроена, напрямую в компилятор, но посчитали удобнее в отдельную библиотеку.


 
Юрий Зотов ©   (2004-05-23 13:24) [5]

> vertal ©   (23.05.04 12:43) [3]

> А можно ли как-то все-таки получить адрес такой
> процедуры/функции

Если не работает
P := @_cos
то вот "обходной маневр", который сработает железно:

function MyCos(X: extended): extended;
begin
 Result := cos(X)
end;

P := @MyCos;


 
vertal ©   (2004-05-23 15:01) [6]

Видимо , только через такой обходной маневр и можно, хотя и криво
- идентификатор "_cos" компилятор не знает


 
VMcL ©   (2004-05-23 15:12) [7]

function GetCosAddr: Pointer;
asm
 mov    eax, OFFSET System.@Cos
end;


 
Petr V. Abramov ©   (2004-05-23 18:49) [8]

>VMcL ©   (23.05.04 15:12) [7]
IMHO, минимум опасно.
до и после вызова System.@Cos компилятор вставляет команды обмена данными с сопроцессором. (на D6, по крайней мере)


 
VMcL ©   (2004-05-23 20:39) [9]

>>Petr V. Abramov ©  (23.05.04 18:49) [8]

Ну это уже проблемы программиста, рискнувшего использовать [7]. Пусть тогда руками укажет wait после вызова потенциально опасного косинуса.


 
Юрий Зотов ©   (2004-05-23 22:33) [10]

Не вижу, чем одна лишняя процедура в программе (MyCos) лучше или хуже другой лишней процедуры (GetCosAddr).


 
vertal ©   (2004-05-24 00:17) [11]

В принципе cos без посредников должен вызываться быстрее ,однако
GetCosAddr компилируется и отрабатывает , но при вызове

Type
 Math_Funtion=Function(x:Extended):Extended;
Var
 p:pointer;
Begin
 p:=GetCosAddr;
 writeln(Math_Funtion(p)(Pi));//error 207
End;

получаю runtime error 207
Я правильно понимаю , что cos принимает и возвращает аргументы типа Extended?


 
Petr V. Abramov ©   (2004-05-24 03:34) [12]

> vertal ©   (24.05.04 00:17) [11]
> Я правильно понимаю  
 Неправильно
см.
Юрий Зотов ©   (23.05.04 13:24) [5]
Юрий Зотов ©   (23.05.04 22:33) [10]
VMcL ©   (23.05.04 20:39) [9]
и (примажусь) :)
Petr V. Abramov ©   (23.05.04 18:49) [8]



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

Текущий архив: 2004.06.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.054 c
6-1081974657
Morph
2004-04-15 00:30
2004.06.06
ClientSocket в цикл ?


3-1084860486
very beginer
2004-05-18 10:08
2004.06.06
Про MasterSource в Table


14-1084627904
DeadMeat
2004-05-15 17:31
2004.06.06
IEXPLORE.EXE


14-1085138662
Yegorchic
2004-05-21 15:24
2004.06.06
Рассылка


6-1082099598
-=Rezya=-
2004-04-16 11:13
2004.06.06
Низкоуровневый сервер