Содержание | Поиск


  • Руководство программиста Free Pascal 3.0.0
  • ОБ ЭТОМ ДОКУМЕНТЕ
  • 1. ДИРЕКТИВЫ КОМПИЛЯТОРА
    • 1.1 Введение
    • 1.2. Локальные директивы
      • 1.2.1. $A или $ALIGN : Выравнивание данных
      • 1.2.2. $A1, $A2, $A4 и $A8
      • 1.2.3. $ASMMODE : Режим ассемблера (только для Intel 80x86)
      • 1.2.4. $B или $BOOLEVAL : Полная проверка логических выражений
      • 1.2.5. $C или $ASSERTIONS : Поддержка формальных утверждений
      • 1.2.6. $BITPACKING : Включить битовую упаковку
      • 1.2.7. $CALLING : Определить соглашение о вызовах
      • 1.2.8. $CHECKPOINTER : Проверять значения указателя
      • 1.2.9. $CODEALIGN : Установить выравнивание кода
      • 1.2.10. $COPERATORS : Разрешить C-подобные операторы
      • 1.2.11. $DEFINE или $DEFINEC : Определить идентификатор
      • 1.2.12. $ELSE : Переключатель условной компиляции
      • 1.2.13. $ELSEC : Переключатель условной компиляции
      • 1.2.14. $ELSEIF или $ELIFC : Переключатель условной компиляции
      • 1.2.15. $ENDC : Завершение условной компиляции
      • 1.2.16. $ENDIF : Завершение условной компиляции
      • 1.2.17. $ERROR или $ERRORC : Генерировать сообщение об ошибке
      • 1.2.18 $ENDREGION: Конец разбираемого региона
      • 1.2.19. $EXTENDEDSYM: Игнорируемый
      • 1.2.20 $EXTENDELSYM: Игнорируемый
      • 1.2.21. $F : Дальний или ближний вызов функций
      • 1.2.22. $FATAL : Генерировать сообщения о фатальных ошибках
      • 1.2.23. $FPUTYPE : Выбрать тип сопроцессора
      • 1.2.24. $GOTO : Поддерживать Goto и Label
      • 1.2.25. $H или $LONGSTRINGS : Использовать AnsiStrings
      • 1.2.26. $HINT : Генерировать сообщение с подсказкой
      • 1.2.27. $HINTS : Разрешить подсказки
      • 1.2.28. $HPPEMIT: Игнорируется
      • 1.2.29. $IF : Начать условную компиляцию
      • 1.2.30. $IFC : Начать условную компиляцию
      • 1.2.31. $IFDEF Имя : Начать условную компиляцию
      • 1.2.32. $IFNDEF : Начать условную компиляцию
      • 1.2.33. $IFOPT : Начать условную компиляцию
      • 1.2.34. $IMPLICITEXCEPTIONS : Неявное завершение генерации кода
      • 1.2.35. $INFO : Генерировать информационное сообщение
      • 1.2.36. $INLINE : Разрешить встраиваемый код
      • 1.2.37. $INTERFACES : Указать тип интерфейса
      • 1.2.38. $I или $IOCHECKS : Проверка ввода/вывода
      • 1.2.39 $IEEEERRORS : Разрешить проверку IEEE констант
      • 1.2.40. $I или $INCLUDE : Подключить файл
      • 1.2.41. $I или $INCLUDE : Включать информацию компилятора
      • 1.2.42. $J или $WRITEABLECONST : Разрешить присваивание для типизированных констант
      • 1.2.43. $L или $LINK : Компоновать объектный файл
      • 1.2.44 $LIBEXPORT : Ignored
      • 1.2.45. $LINKFRAMEWORK : Компоновать в структуру
      • 1.2.46. $LINKLIB : Компоновать библиотеку
      • 1.2.47. $M или $TYPEINFO : Генерировать информацию о типах
      • 1.2.48. $MACRO : Разрешить использование макросов
      • 1.2.49. $MAXFPUREGISTERS : Максимальное количество регистров FPU для переменных
      • 1.2.50. $MESSAGE : Генерировать информационное сообщение
      • 1.2.51. $MINENUMSIZE : Указать минимальный размер перечисления
      • 1.2.52. $MINFPCONSTPREC : Указать точность констант с плавающей точкой
      • 1.2.53. $MMX : Поддержка MMX (только Intel 80x86)
      • 1.2.54. $NODEFINE : Игнорируется
      • 1.2.55. $NOTE : Генерировать примечание
      • 1.2.56. $NOTES : Выводить примечания
      • 1.2.57. $OBJECTCHECKS : Проверять объект
      • 1.2.58. $OPTIMIZATION : Включить оптимизацию
      • 1.2.59. $PACKENUM или $Z : Минимальный размер перечисляемого типа
      • 1.2.60. $PACKRECORDS : Выравнивание элементов записи
      • 1.2.61. $PACKSET : Указать размер множества
      • 1.2.62. $POP : Перезаписать настройки компилятора
      • 1.2.63. $PUSH : Сохранить настройки компилятора
      • 1.2.64. $Q или $OV или $OVERFLOWCHECKS: Проверка переполнения
      • 1.2.65. $R или $RANGECHECKS : Проверка диапазона
      • 1.2.66 $REGION : Отметить начало вложенного региона
      • 1.2.67. $R или $RESOURCE : Подключить ресурс
      • 1.2.68. $SATURATION : Насыщенность операций (только Intel 80x86)
      • 1.2.69 $SAFEFPUEXCEPTIONS Ждаать сохранения значений FPU на Intel x86
      • 1.2.70 $SCOPEDENUMS Управление использованием перечисляемого типа
      • 1.2.71. $SETC : Определить и присвоить значение идентификатору
      • 1.2.72. $STATIC : Разрешить использование ключевого слова Static
      • 1.2.73. $STOP : Генерировать сообщение о фатальной ошибке
      • 1.2.74 $STRINGCHECKS : Ignored
      • 1.2.75. $T или $TYPEDADDRESS : Тип оператора адреса (@)
      • 1.2.76. $UNDEF или $UNDEFC : Разыменовать идентификатор
      • 1.2.77. $V или $VARSTRINGCHECKS : Проверка Var-строки
      • 1.2.78. $W или $STACKFRAMES : Генерировать кадры стека
      • 1.2.79. $WAIT : Ожидать нажатия клавиши ENTER
      • 1.2.80 $WARN : Контроль генерации предупреждений
      • 1.2.81. $WARNING : Генерировать предупреждение
      • 1.2.82. $WARNINGS : Выводить предупреждения
      • 1.2.83. $Z1, $Z2 и $Z4
    • 1.3. Глобальные директивы
      • 1.3.1. $APPID : Указать ID приложения
      • 1.3.2. $APPNAME : Указать имя приложения
      • 1.3.3. $APPTYPE : Указать тип приложения
      • 1.3.4. $CALLING : Соглашение о вызовах по умолчанию
      • 1.3.5. $CODEPAGE : Установить кодовую страницу
      • 1.3.6. $COPYRIGHT: Указать сведения об авторских правах
      • 1.3.7. $D или $DEBUGINFO : Отладочные символы
      • 1.3.8. $DESCRIPTION : Описание приложения
      • 1.3.9. $E : Эмуляция сопроцессора
      • 1.3.10 $EXTENSION : Расширение генерируемого двоичного файла.
      • 1.3.11 $FRAMEWORKPATH : Путь к файлам среды.
      • 1.3.12. $G : Генерировать код 80286
      • 1.3.13 $IMAGEBASE : Указание начального адреса в DLL
      • 1.3.14. $INCLUDEPATH : Указать путь подключений
      • 1.3.15. $L или $LOCALSYMBOLS : Локальная символьная информация
      • 1.3.16 $LIBPREFIX : Задать имя файла библиотеки
      • 1.3.17. $LIBRARYPATH : Указать путь библиотек
      • 1.3.18 $LIBSUFFIX : Задать суффикс библиотеки
      • 1.3.19 $MAXSTACKSIZE : Установить максимальный размер стека
      • 1.3.20. $M или $MEMORY : Размер памяти
      • 1.3.21 $MINSTACKSIZE : Установить минимальный размер стека
      • 1.3.22. $MODE : Установить режим совместимости компилятора
      • 1.3.23. $MODESWITCH : Выбор функций режима
      • 1.3.24. $N : Цифровая обработка
      • 1.3.25. $O : Второй уровень оптимизации
      • 1.3.26. $OBJECTPATH : Указать пути для объектных файлов
      • 1.3.27. $P или $OPENSTRINGS : Использовать открытые строки
      • 1.3.28. $PASCALMAINNAME : Установить имя точки ввода
      • 1.3.29. $PIC : Генерировать код PIC
      • 1.3.30 $POINTERMATH : Разрешить использование математики с указателями
      • 1.3.31. $PROFILE : Профилирование
      • 1.3.32. $S : Проверка стека
      • 1.3.33. $SCREENNAME : Указать имя экрана
      • 1.3.34 $SETPEFLAGS : Задать флаг PE для исполняемых файлов
      • 1.3.35. $SMARTLINK : Использовать «умную компоновку»
      • 1.3.36 $SYSCALLS : Select system calling convention on Amiga/MorphOS
      • 1.3.37. $THREADNAME : Установить имя потока в Netware
      • 1.3.38. $UNITPATH : Указать путь модулей
      • 1.3.39 $VARPROPSETTER : Разрешить использование var/out/const параметров для установки свойств
      • 1.3.40. $VERSION : Указать версию DLL
      • 1.3.41. $WEAKPACKAGEUNIT : Игнорируется
      • 1.3.42. $X или $EXTENDEDSYNTAX : Расширенный синтаксис
      • 1.3.43. $Y или $REFERENCEINFO : Вставить информацию обозревателя
  • 2. ИСПОЛЬЗОВАНИЕ УСЛОВНЫХ ОПЕРАТОРОВ, СООБЩЕНИЙ И МАКРОСОВ
    • 2.1. Условные операторы
      • 2.1.1. Предопределённые идентификаторы
    • 2.2. Макросы
    • 2.3. Переменные времени компиляции
    • 2.4. Выражения времени компиляции
      • 2.4.1. Определение
      • 2.4.2. Использование
    • 2.5. Сообщения
  • 3. ИСПОЛЬЗОВАНИЕ ЯЗЫКА АССЕМБЛЕРА
    • 3.1. Использование ассемблера в исходных кодах
    • 3.2. Встроенный ассемблер Intel 80x86
      • 3.2.1. Синтаксис Intel
      • 3.2.2. Синтаксис AT&T
    • 3.3. Встроенный ассемблер Motorola 680x0
    • 3.4. Сигнализация изменения регистров
  • 4. СГЕНЕРИРОВАННЫЙ КОД
    • 4.1. Модули
    • 4.2. Программы
  • 5. ПОДДЕРЖКА INTEL MMX
    • 5.1. О чем это?
    • 5.2. Поддержка насыщенности
    • 5.3. Ограничения поддержки MMX
    • 5.4. Поддерживаемые операции MMX
    • 5.5. Оптимизация поддержки MMX
  • 6. ВОПРОСЫ КОДИРОВАНИЯ
    • 6.1. Соглашения о регистрах
      • 6.1.1. Аккумулятор
      • 6.1.2. 64-разрядный аккумулятор
      • 6.1.3. Регистр результата с плавающей точкой
      • 6.1.4. Регистр объектов
      • 6.1.5. Регистр-указатель кадра
      • 6.1.6. Регистр-указатель стека
      • 6.1.7. Временные регистры
      • 6.1.8. Таблица регистров процессора
    • 6.2. Преобразование имён
      • 6.2.1. Преобразование имён для блоков данных
      • 6.2.2. Преобразование имён для блоков кода
      • 6.2.3. Модификация преобразованных имён
    • 6.3. Механизм вызова
    • 6.4. Вложенные процедуры и функции
    • 6.5. Вызовы конструктора и деструктора
      • 6.5.1. Объекты
      • 6.5.2. Классы
    • 6.6. Код входа/выхода
      • 6.6.1. Стандартная процедура начала/завершения Intel 80x86
      • 6.6.2. Стандартная процедура начала/завершения Motorola 680x0
    • 6.7. Передача параметра
      • 6.7.1. Выравнивание параметров
    • 6.8. Ограничения стека
  • 7. ВОПРОСЫ КОМПОНОВКИ
    • 7.1. Использование внешнего кода и переменных
      • 7.1.1. Объявление внешних функций и процедур
      • 7.1.2. Объявление внешних переменных
      • 7.1.3. Объявление модификатора соглашений о вызовах
      • 7.1.4. Объявление внешнего объектного кода
        • Компоновка объектного файла
        • Компоновка библиотеки
    • 7.2. Создание библиотек
      • 7.2.1. Экспорт функций
      • 7.2.2. Экспорт переменных
      • 7.2.3. Компиляция библиотек
      • 7.2.4. Стратегия поиска модуля
    • 7.3. Использование умной компоновки
  • 8. ВОПРОСЫ ПАМЯТИ
    • 8.1. Модель памяти
    • 8.2. Форматы данных
      • 8.2.1. Целочисленные типы
      • 8.2.2. Символьные типы
      • 8.2.3. Логические типы
      • 8.2.4. Перечисляемые типы
      • 8.2.5. Типы с плавающей точкой
        • Single
        • Double
        • Extended
        • Comp
        • Real
      • 8.2.6. Указатели
      • 8.2.7. Строки
        • Ansistring
        • Shortstring
        • Widestring
      • 8.2.8. Множества
      • 8.2.9. Статические массивы
      • 8.2.10. Динамические массивы
      • 8.2.11. Записи
      • 8.2.12. Объекты
      • 8.2.13. Классы
      • 8.2.14. Файлы
      • 8.2.15. Процедурные типы
    • 8.3. Выравнивание данных
      • 8.3.1. Выравнивание типизированных переменных и констант
      • 8.3.2. Выравнивание структурированных типов
    • 8.4. Куча
      • 8.4.1. Стратегия выделения динамической памяти
      • 8.4.2. Увеличение кучи
      • 8.4.3. Отладка кучи
      • 8.4.4. Написание вашего собственного менеджера памяти
    • 8.5. Использование памяти DOS под расширителем Go32
    • 8.6. При переносе кода Турбо Паскаль
    • 8.7. Memavail и Maxavail
  • 9. СТРОКИ РЕСУРСОВ
    • 9.1. Введение
    • 9.2. Файл строковых ресурсов
    • 9.3. Обновление таблиц строк
    • 9.4. GNU gettext
    • 9.5. Предупреждения
  • 10. ПРОГРАММИРОВАНИЕ ПОТОКОВ
    • 10.1. Введение
    • 10.2. Программирование потоков
    • 10.3. Критические разделы
    • 10.4. Менеджер потоков
  • 11. ОПТИМИЗАЦИИ
    • 11.1. Независимо от процессора
      • 11.1.1. Сложение констант
      • 11.1.2. Слияние констант
      • 11.1.3. Сокращённая оценка
      • 11.1.4. Константы множеств
      • 11.1.5. Небольшие множества
      • 11.1.6. Проверка диапазона
      • 11.1.7. And вместо modulo
      • 11.1.8. Сдвиг вместо умножения или деления
      • 11.1.9. Автоматическое выравнивание
      • 11.1.10. Умная компоновка
      • 11.1.11. Встроенные подпрограммы
      • 11.1.12. Пропуск кадра стека
      • 11.1.13. Регистры переменных
    • 11.2. Конкретные процессоры
      • 11.2.1. Intel 80x86
      • 11.2.2. Motorola 680x0
    • 11.3. Переключатели оптимизации
    • 11.4. Советы по генерации наиболее быстрого кода
    • 11.5. Советы по генерации наименьшего кода
    • 11.6. Оптимизация программы в целом
      • 11.6.1. Общие сведения
    • 11.7. Основные принципы
      • 11.7.1. Как использовать
      • 11.7.2. Доступные оптимизации WPO
      • 11.7.3. Формат файла WPO
  • 12. ПРОГРАММИРОВАНИЕ ОБЩЕДОСТУПНЫХ БИБЛИОТЕК
    • 12.1. Введение
    • 12.2. Создание библиотеки
    • 12.3. Использование библиотеки в программе на Паскале
    • 12.4. Использование библиотек Паскаль с программами на С
    • 12.5. Некоторые вопросы Windows
  • 13. ИСПОЛЬЗОВАНИЕ РЕСУРСОВ WINDOWS
    • 13.1. Директива ресурса $R
    • 13.2. Создание ресурсов
    • 13.3. Использование строковых таблиц
    • 13.4. Вставка информации о версии
    • 13.5. Вставка значка приложения
    • 13.6. Использование препроцессора Pascal
  • ПРИЛОЖЕНИЕ А: АНАТОМИЯ ФАЙЛА МОДУЛЯ
    • A.1. Основы
    • A.2. Чтение ppu-файлов
    • A.3. Заголовок
    • A.4. Разделы
    • A.5. Создание ppu-файлов
  • ПРИЛОЖЕНИЕ B: СТРУКТУРА ДЕРЕВА ИСХОДНОГО КОДА КОМПИЛЯТОРА И RTL
    • B.1. Дерево исходного кода компилятора
    • B.2. Дерево исходного кода RTL
  • ПРИЛОЖЕНИЕ С: ОГРАНИЧЕНИЯ КОМПИЛЯТОРА
  • ПРИЛОЖЕНИЕ D: РЕЖИМЫ КОМПИЛЯТОРА
    • D.1. Режим FPC
    • D.2. Режим TP
    • D.3. Режим Delphi
    • D.4. Режим OBJFPC
    • D.5. Режим MACPAS
  • ПРИЛОЖЕНИЕ Е: ИСПОЛЬЗОВАНИЕ fpcmake
    • E.1. Введение
    • E.2. Функциональность
    • E.3. Использование
    • E.4. Формат файла конфигурации
      • E.4.1. clean
      • E.4.2. compiler
      • E.4.3. Default
      • E.4.4. Dist
      • E.4.5. Install
      • E.4.6. Package
      • E.4.7. Prerules
      • E.4.8. Requires
      • E.4.9. Rules
      • E.4.10. Target
    • E.5. Программы, необходимые для работы с созданным makefile
    • E.6. Переменные, которые влияют на генерируемый makefile
      • E.6.1. Переменные каталогов
      • E.6.2. Переменные командной строки компилятора
    • E.7. Переменные, установленные с помощью fpcmake
      • E.7.1. Переменные каталогов
      • E.7.2. Целевые переменные
      • E.7.3. Переменные командной строки компилятора
      • E.7.4. Имена программ
      • E.7.5. Расширения файлов
      • E.7.6. Целевые файлы
    • E.8. Правила и цели, созданные с помощью fpcmake
      • E.8.1. Шаблонные правила
      • E.8.2. Правила сборки
      • E.8.3. Правила очистки
      • E.8.4. Правила архивации
      • E.8.5. Правила инсталляции
      • E.8.6. Информативные правила
  • ПРИЛОЖЕНИЕ F: КОМПИЛЯЦИЯ КОМПИЛЯТОРА
    • F.1. Введение
    • F.2. Перед стартом
    • F.3. Компиляция с использованием make
    • F.4. Компиляция вручную
      • F.4.1. Компиляция RTL
      • F.4.2. Компиляция компилятора
  • ПРИЛОЖЕНИЕ G: ОПРЕДЕЛЕНИЯ КОМПИЛЯТОРА ВО ВРЕМЯ КОМПИЛЯЦИИ
  • Оригинал