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

Вниз

Загадочный 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 1.976 c
4-1083229630
Wiz@rd
2004-04-29 13:07
2004.06.06
WH_KEYBOARD & Chil Window


14-1084631415
GuAV
2004-05-15 18:30
2004.06.06
Exeшник - на дельфе, на С билдере или ещё на чм-то как узнать.


14-1084902169
ignat
2004-05-18 21:42
2004.06.06
freecell


1-1085422437
Memo
2004-05-24 22:13
2004.06.06
MapInfo & Delphi


1-1085138877
DIS
2004-05-21 15:27
2004.06.06
меню к MsAgent





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