Разместите нашу кнопку!

Новые статьи:

Programming articles

Создание сайтов на шаблонах

Множество вариантов работы с графикой на канве

Шифруем файл с помощью другого файла

Перехват API функций - Основы

Как сделать действительно хороший сайт

Создание почтового клиента в Delphi 7

Применение паскаля для решения геометрических задач

Управление windows с помощью Delphi

Создание wap сайта

Операционная система unix, термины и понятия

SQL враг или друг

Возникновение и первая редакция ОС UNIX

Оптимизация проекта в Delphi

Ресурсы, зачем нужны ресурсы

Термины программистов 20 века

Советы по созданию собственного сайта с нуля

Шифруем файл с помощью пароля

Фракталы - геометрия природы

Crypt - Delphi программа для шифрования

Рассылка, зачем она нужна и как ее организовать?

Учебник по C++ для начинающих программистов

Уроки для изучения ассемблера

Загадочный тип PCHAR

Средства по созданию сайтов

Операторы преобразования классов is и as

Borland Developer studio 2006. Всё в одном

Создание базы данных в Delphi, без сторонних БД


Software engineering articles



Путаница в терминах

Интересные моменты программирования

    Язык Pascal внёс свои определения и термины в программирование. Поэтому программисты, которые переходили с других языков программирования на Delphi, не жаловали этот язык. Поэтому Delphi не такой популярный, как хотелось бы. А те, кто начинал программировать с Delphi считают этот язык простым и удобным.

     В языке Pascal есть различие между терминами "процедура" и "функция", а фактически это просто подпрограммы. Просто подпрограмма под названием "функция" изменяет значение регистра EAX, а процедура не изменяет этот регистр. Если хорошенько подумать, то и процедура изменяет этот регистр, но это значение обычно "ерунда", а функция изменяет значение регистра EAX на значение осмысленное. Но нельзя недооценить вклад языка Pascal в методологию вызовов подпрограмм. Вы иногда наверное замечали что в некоторых исходниках около объявления подпрограммы написано одна из данных директив: pascal, cdecl, stdcall. Эти директивы влияют на метод вызова подпрограммы.

Объясню поподробнее.
1.  Директива pascal определяет "паскальный" вызов подпрограммы (он стоит по умолчанию во всех процедурах и функциях): а именно параметры пихаются в стек в прямом порядке, но стек нормализует ВЫЗЫВАЕМЫЙ.
2.  Директива cdecl (C declaration) определяет "сишный" вызов подпрограммы: а именно параметры пихаются в стек в обратном порядке, но стек нормализует ВЫЗЫВАЮЩИЙ (путаница какая-то, неправда ли?).
3.  Директива stdcall (Standart calling) определяет стандартный вызов всех продпрограмм всех библиотек WINDOWS: параметры пихаются в стек в обратном порядке, но стек нормализует ВЫЗЫВАЕМЫЙ. Это есть синтез двух видов вызовов.

     Язык Pascal внёс путаницу в заголовочные файлы и модули. Буду говорить как все нормальные программисты. Заголовочный файл это тоже самое, что и модуль в паскале. А модуль в Windows это любой исполняемый файл формата PE, который может быть загружен в память данного процесса это *.DLL, *.SYS, *.EXE. Обычно модулем выступает Dll-файл, но ни что не мешает и exe-файлу быть модулем, но от него толку не будет, только место в памяти будет занимать т.к. он не экспортирует никаких функций, хотя ничто не мешает ему содержать таблицу экспорта. Теоретически SYS файл тоже может быть модулем, но на практике никогда этого не видел, так как это трудно реализовать (не буду залезать в дебри).