Модификаторы cdecl и pascal

Модификаторы cdecl и pascal

Рассматриваемые системы программирования в языке Си позволяют обращаться из программы на языке Си к программам, написанным на других языках, и обратно. При смешивании языков программирования приходится иметь дело с двумя важными проблемами: написанием внешних имен и передачей параметров.

Результатом работы компилятора языка Си является файл, содержащий объектный код программы. Файлы с объектным кодом, полученные при компиляции всех исходных файлов, составляющих программу, компоновщик объединяет в один выполнимый файл. При этом производится так называемое разрешение ссылок на глобальные объекты из разных исходных файлов программы.

При компиляции все глобальные идентификаторы программы, т. е. имена функций и глобальных переменных, сохраняются в объектном коде и используются компоновщиком в процессе работы. По умолчанию эти идентификаторы сохраняются в своем первоначальном виде (т. е. набранные прописными, строчными буквами либо и теми, и другими). Кроме того, в качестве первого символа каждого идентификатора компилятор языка Си добавляет символ подчеркивания.

Компоновщик по умолчанию различает прописные и строчные буквы, поэтому идентификаторы, используемые в различных исходных файлах программы для именования одного и того же объекта, должны полностью совпадать с точки зрения, как орфографии, так и регистров клавиатуры. Для обеспечения совпадения идентификаторов, используемых в разноязычных исходных файлах, применяются модификаторы pascal и cdecl.

Модификатор pascal

Применение модификатора pascal к идентификатору приводит к тому, что идентификатор преобразуется к верхнему регистру и к нему не добавляется символ подчеркивания. Этот идентификатор может использоваться для именования в программе на языке Си глобального объекта, который используется также в программе на языке Паскаль. В объектном коде, сгенерированном компилятором языка Си, и в объектном коде, сгенерированном компилятором языка Паскаль, идентификатор будет представлен идентично.

Если модификатор pascal применяется к идентификатору функции, то он оказывает влияние также и на передачу аргументов. Засылка аргументов в стек производится в этом случае не в обратном порядке, как принято в компиляторах языка Си в СП MSC и СП ТС, а в прямом—первым засылается в стек первый аргумент.

Функции типа pascal не могут иметь переменное число аргументов, как, например, функция printf. Поэтому нельзя использовать завершающее многоточие в списке параметров функции типа pascal.

Пример: см. пример 4 в разделе 3.3.3.4.

Модификатор cdecl

Существует опция компиляции, которая присваивает всем функциям и указателям на функции тип pascal. Это значит, что они будут использовать вызывающую последовательность, принятую в языке Паскаль, а их идентификаторы будут приемлемы для вызова из программы на Паскале. При этом можно указать, что некоторые функции и указатели на функции используют вызывающую последовательность, принятую в языке Си, а их идентификаторы имеют традиционный вид для идентификаторов языка Си. Для этого их объявления должны содержать модификатор cdecl.

Примечание. Все функции в стандартных включаемых файлах (например, stdio.h) объявлены с модификатором cdecl. Это позволяет использовать библиотеки стандартных функций даже в тех программах, которые компилируются с упомянутой выше опцией компиляции.

Примечание. Главная функция программы (main) должна быть всегда объявлена с модификатором cdecl, поскольку модуль поддержки выполнения передает ей управление, используя вызывающую последовательность языка Си.

Пример: см. пример 3 в разделе 3.3.3.4.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

11.1.2. Модификаторы прав доступа к файлам

Из книги автора

11.1.2. Модификаторы прав доступа к файлам Модификаторы прав доступа файлов — это также битовые маски, значения которых представляют биты setuid, setgid и sticky-бит ("липкий" бит). Если бит setuid установлен для исполняемого файла, то эффективный идентификатор пользователя процесса


3. Функции в Pascal

Из книги автора

3. Функции в Pascal Описание функции определяет часть программы, в которой вычисляется и возвращается значение. Общий вид заголовка функции следующий: Function <имя > [(<список формальных параметров>)]: <тип возвращаемого результата >; Функция активизируется при ее


1. Строковый тип в Pascal

Из книги автора

1. Строковый тип в Pascal Последовательность символов определенной длины называется строкой. Переменные строкового типа определяются путем указания имени переменной, зарезервированного слова string, и возможно, но не обязательно указания максимального размера, т. е. длины


Модификаторы геометрии

Из книги автора

Модификаторы геометрии Для изменения параметров объектов сцены в среде 3ds Max служит панель Modify (Изменение). Она содержит список модификаторов, позволяет управлять стеком модификаторов и редактировать подобъекты.Каждый модификатор привносит в моделирование большое


Модификаторы

Из книги автора

Модификаторы В предыдущей главе мы начали знакомиться с модификаторами и научились применять их к сплайнам. Однако модификаторы можно назначать не только двухмерным формам, но и трехмерным. Например, модификатор может действовать на объект, деформируя его различными


Параметрические модификаторы

Из книги автора

Параметрические модификаторы Каждый из параметрических модификаторов содержит два режима редактирования подобъектов: Gizmo (Габаритный контейнер) и Center (Центр).Управление положением габаритного контейнера модификатора (Gizmo) осуществляется при помощи специального


Модификаторы свободных деформаций

Из книги автора

Модификаторы свободных деформаций Модификаторы свободных деформаций (Free Form Deformers, FFD) предназначены для свободной деформации объектов c помощью управляющих точек. В 3ds Max существует пять модификаторов свободной деформации: FFD 2 x 2 x 2 (Произвольная деформация 2 x 2 x 2), FFD 3 x 3 x 3


3.11. Внутренние модификаторы

Из книги автора

3.11. Внутренние модификаторы Обычно модификаторы (например, i или m) задаются после регулярного выражения. Но что если мы хотим применить модификатор только к части выражения?Существует специальная нотация для включения и выключения модификаторов. Заключенный в круглые


Модификаторы параметров методов

Из книги автора

Модификаторы параметров методов Методы (и статические, и уровня экземпляра) могут использовать параметры, передаваемые вызывающей стороной. Однако, в отличие от некоторых других языков программировании, в C# предлагается множество модификаторов параметров, которые


Модификаторы спецификации преобразования, используемые в функции printf( )

Из книги автора

Модификаторы спецификации преобразования, используемые в функции printf( )      Мы можем несколько расширить основное определение спецификации преобразования, поместив модификаторы между знаком % и cимвoлoм, определяющим тип преобразования. В приводимой ниже таблице дан


Модификаторы const и volatile

Из книги автора

Модификаторы const и volatile Модификатор const не допускает явного присваивания значения переменной либо других косвенных действий по изменению ее значения, таких как выполнение операций инкремента и декремента. Значение указателя, объявленного с модификатором const, не может


Модификаторы near, far, huge

Из книги автора

Модификаторы near, far, huge Эти модификаторы оказывают воздействие на работу с адресами объектов.Компилятор языка Си позволяет использовать при компиляции одну из нескольких моделей памяти. Виды моделей памяти и методы их применения рассмотрены в разделе 8 "Модели


Модификаторы типа функции

Из книги автора

Модификаторы типа функции Компилятор языка Си поддерживает ряд модификаторов типа функций: pascal, cdecl, interrupt, near, far и huge (модификатор interrupt не реализован в версии 4 СП MSC). Модификаторы рассмотрены в разделе 3.3.3 "Описатели с


Видимость членов класса и модификаторы доступа

Из книги автора

Видимость членов класса и модификаторы доступа Каждое поле, метод или свойство класса имеет модификатор (атрибут) доступа, задающий правила его видимости. В PascalABC.NET существуют четыре вида модификаторов доступа: public (открытый), private (закрытый), protected (защищенный) и internal


10.2.3. Модификаторы поиска

Из книги автора

10.2.3. Модификаторы поиска Возможности поиска в Google не ограничиваются применением логических операторов и операторов + и — . Вы можете использовать специальные модификаторы для более эффективного поиска. Например, модификатор site позволяет задать домен, в пределах