8.4.2. Конструкции

На верх  Назад  Вперёд

Программа распознаёт следующие объявления и операторы С:

Элемент

Описание

Объявления

Объявления будут заменяться на константы в Pascal, если они являются простыми объявлениями. Макросы заменяются (если это возможно) на функции. Однако аргументы всегда являются целыми числами, поэтому их нужно заменить вручную при необходимости. Простые выражения в объявлениях операторов распознаются в большинстве случаев, как арифметические операторы: сложение, вычитание, умножение, деление, логические операторы, операторы сравнения, операторы сдвига. Конструкции С (А ? В : С) также распознаются и транслируются в конструкции Pascal с оператором IF ( однако это может вызвать проблемы).

Операторы препроцессора

Условные команды препроцессора распознаются и транслируются в эквивалентные директива компилятора Pascal. Специальные команды

#ifdef __cplusplus

Также распознаются и удаляются.

Определение типов

Определение типа (typedef) заменяется в Pascal на соответствующий тип. Следующие основные типы распознаются:

char заменяется на char.

float заменяется на real (=double в Free Pascal).

int заменяется на longint.

long заменяется на longint.

long int заменяется на longint.

short заменяется на integer.

unsigned заменяется на cardinal.

unsigned char заменяется на byte.

unsigned int заменяется на cardinal.

unsigned long int заменяется на cardinal.

unsigned short заменяется на word.

ivod игнорируется.

Эти типы также заменяются, если они появляются в аргументах функций и процедур.

Функции и процедуры

Функции и процедуры транслируются как есть. Параметр-указатель может быть заменён на параметр-ссылку (используя аргумент var) при помощи опции –р командной строки. Функции, которые имеют переменное количество аргументов, заменяются на функции с модификатором cvar (это используется для аргумента array of const).

Спецификаторы

Спецификатор extern распознаётся, однако он игнорируется. Спецификатор packed также распознаётся и заменяется на директиву PACKRECORDS. Спецификатор const также распознаётся, но игнорируется.

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

Если указана опция –w, то распознаются следующие модификаторы

STDCALL

CDECL

CALLBACK

PASCAL

WINAPI

APIENTRY

WINGDIAPI

как определено в дескрипторах win32. В добавок опция -x распознаёт модификатор SYS_TRAP.

Перечисления

Конструкции enum заменяются на перечисляемые типы. Имейте ввиду, что в С перечисляемые типы могут иметь значения, связанные с ними. Free Pascal также позволяет это делать в некоторой степени. Если вы знаете, что с перечислениями связаны значения, то лучше использовать опцию –е, которая заменяет перечисления на серии целочисленных констант.

Объединения

Объединения (unions) заменяются на записи.

Структуры

Структуры заменяются на записи Pascal с С-упаковкой.