Главная страница
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.044 c
14-1085313677
GanibalLector
2004-05-23 16:01
2004.06.06
почему так ???


4-1082347355
scanner
2004-04-19 08:02
2004.06.06
Отследить появление нового окна.


4-1083243415
DoG
2004-04-29 16:56
2004.06.06
CreateNamedPipe


1-1085359775
tamroF
2004-05-24 04:49
2004.06.06
Ошибка в DLL


1-1085036335
cardinal
2004-05-20 10:58
2004.06.06
Многострочность в TreeView