GCC - The Complete Reference (537669), страница 33
Текст из файла (страница 33)
Использование Сборного Компилятора Хо сомтхмпи ВМП ваОСВЪМ Хер Директива 1МС~00Е Директива хмстдпзи в соответствии с определением стандарта имеет следующий синтаксис: ХНСЬОПИ тххеааае Точный смысл йй2 опале зависит от конкретной реализации. Компилятор Сг ЛП3 распознает Шнпаме, как имя файла из текущего расположения или любого другого пути, указанного параметром опции командной строки -х.
То есть директива хмстяви работает так же, как и директива препроцессора СРР йхас Хцсте, с той лишь разницей, что директива хмсьппм выполняется компилятором и потому ее применение не требует использования препроцессора. Целочисленные константы (1п1еяег Соп61ап16) Значения целочисленных констант выражаются в системах счисления на основании 2, 8, 10 и 16. В следующем примере показано, как записывается одно и то же значение в каждой из перечисленных систем счисления.
Двоичная система обозначается буквой "в", восьмеричная — "о", шестнадцатиричная — "Х" или "х". Цыфры шестнадцатиричной системы счисления могут записываться как с использованием заглавных, так и строчных букв. с Ьавев.х с 9НОСВаи Ьавев м = Хааат Рахит *,м м = х 4ааь вахит *,м а'4ааь' Рахит *,и М = О'45053' внхмт ,м М = В ОХООХОХОООХОХОХХ Рахит ",м вмэ вассиан ьавев Операторы сравнения В таблице 7.6 показаны последовательности символов, которые используются для обозначения традиционных операций сравнения величин, Таблица 7.6 Альтернативные символы для операторов сравнения пргмнннньнмй онеГютор йньтернатнвнмй онвратор Значение Больше Меньше Больше или равно Глава 7. Компиляция программ на языке Рог(гап 1 5 1 бра(кваканий впвратар Лпэгврватнаный апврамр Значвннв Меньше или равно Не равно Равно разновидности основных типов данных. Селектор ОАТА Предусмотрено применение специальных отметок-селекторов пйтй для внесения юиенений в основные типы переменив)х.
Например, синтаксис для определения разновидности к1ш 3 типа 1нтБОВВ выглядит так: 1ктеоек(ктио 3) Возможными значениями для к1ип являются о, 1, 3, 5, 7. Этот синтаксис пригоден для всех родительских типов (1иткаке, еекп, сомрпех, ьоа1сдь, Сдйкйстйп), хотя не для всех типов задействованы все значения.
В таблице 7.7 от- ДЕЛЬНО ОПИСЫВаЮтСя ВСЕ ЗНаЧЕНИя СЕЛЕКтОра Кгиц И ИХ ПРИМЕНЕНИЕ В КхСС дпя Каждого из типов данных. Точное значение к1ип меняется от одной платформы к дру- )С, потому что разрядность и диапазон значений основных типов определяются возможностями оборудования. 7аблицв 7.7. Числа, определяемые для селвкто в К)Н0 йвд значвппв Опнсвннв Значение сейчас не задействовано, но зарезервировано для использования а будущем. Установка по умолчанию. Результат будет тем же, как и без применения к1мо. Обычно соответствует гмтксва*4, аввь*4, СоМэьвх 8, ьоаголь*4.
Эти типы занимают е два раза больше памяти, чем применяемые по умолчанию. В ОМО, изменение этого кгиО СООтвЕтСтвУет стандаРту Гог(гап 90 для двойной точности. Поэтому акль(кхио г) соответствует ооовьк ваксгатои, который обычно соответствует ааль а. Таюке сомвькх<кгив г) соответствует ооовьк сомвькх, который обычно соответствует сомвькх*14.
зиткака<кзио=г) и ьосзсль(кзио г) поддерживаются не каждой Реализацией ОМО Роптал. Эти типы занимают столько же пространства, как тип снвалсткк(кгив 1) . Это обычно соответствует звтеака 1 и ьоагсль*1. Это значение кэио может быть предусмотрено не для всех типов а некоторых реализациях ОМО. Эти типы занимают вдвое меньшее пространство, чем предусмотрено по умолчанию (или при применении к1ио 1). Это обычно соответствует хнтваКа г и ьсазоль*г. Это значение кзмв можвт быть предусмотрено не для всех типов а некоторых реализациях ЭМО. Действует только для хиткака(кгио 7), этот тип имеет размер наименьшего возможного указателя, который может содержать адрес переменной единственной сньвлсткк*1. На 32-битных системах зто соответствует хвтКОка 4, а на 64-битных — змтвакв*з. Квмпиляция праорамм на язьиа )ю н есмотря на отсутствие стандарта языка чача в таком виде, как опубликованные официальными органами стандартизации документы для языков С, С++ и Ада, все же существуе~ вполне ясное и простое определение этого языка.
Язык вача находится под полным контролем корпорации 5пп М(сгозузгегпз, и эта организация несет всю ответственность его за поддержку и развитие. Синтаксис и основные структуры самого языка очень мало изменились со времени выпуска. А вот АР! (системные классы) Регулярно пополняются, и их количество по сравнению с первоначальным возРосло уже в несколько раз. Что касается самого компилятора языка, то компилятор /ача принципиально отличается от других комиляторов. Он вырабатывает объектный код в двух различных формах.
Во-первых, он подобно С, С++, или любому другому компилятору может использоваться ди созда ния системно-ориентированных (паг!че) двоичных объектных файлов, содержащих машинный код, г!епосредственно исполняемый целевой машиной. Во-вторых, он может вырабатывать объектные файлы в формате байтового кода./ача (байт-кода, "зача Ьугесоде"), которые выполняются особым интерпретатором — любой виртуальной машиной Зача (зача Чапа! Маз!ппе, з'уМ). Компилятор бЬП) 1ача также способен принимать на входе Файлы с байт-кодом интерпретатора ч'УМ и вырабатывать из них системно-ориевтированные объектные файлы, применимые в компоновке машинных программ. Базовая компиляция В таблице 8.1 представлен список суффиксов (расширений) имен файлов, имеющих отношение к компиляции и компоновке программ на языке вача.
Лолный перечень распознаваемых С СС суффиксов файловых имен находится в приложении Г. Глава й. Компиляция программ на языке Зауа 153 [аблица 8.1. Расширения файлов, применяемые а п ограмми овании на!а(/а 944/вам соде(гаване яьейла Файл архива, библиотека объектных файлов длл статической компоновки. Объектный файл, содержащий байтовый код /зчз в формате интерпретатора виртуальной машины зача (бзйт-код ЛlМ].
Исходный код на языке./зчз. Двоичный объектный файл в формате, поддерживаемом компоновщиком. Исходный код на ассемблере. Разделяемая библиотека для динамической компоновки ео время выполнения программ. .с1авв .акта ,е Преобразование отдельного исходного файла в машинную программу Для того, чтобы /ача-класс был выполняемым, он должен быть объявлен как рцЬ11с и иметь метод с сигнатурой риЬ11с вайп ( ), как в следующем примере; /* Не11оног1й.Чача */ рлЬ11с о1аеа Не11оиог1й ( рпь11с асас1о тгоей ваап(ясг[пд ага[)) ( Вуагев.опг.рг1пс1п("Ье11о, иог1й")/ ) ) е дс( --ва1п=не11оиог1й -иа11 не11оиог1й.зача -о не11оиогтй Опция -о назначает выполнимому файлу имя не11оног1й, который по умолчанию был бы назван а. оис.
Для запуска на выполнение готовой программы нужно просто ввести ее имя в командной строке: Ъ Не11оног1й Исполняемые машиной двоичные файлы свободны от ограничения, налагаемою интерпретатором /ага на имена выполнимых классов. Поэтому исполняемый файл готовой программы в машинном коде может быть назван как угодно. В следуюшем примере тот же не11оиог1й. з ача компилируется в машинную программу ьоийу: 3 дсз --ва1п=не11оиог1й -иа11 не11оиог1й.бача -о ьоийу Для компиляции программы на языке /ауа следует использовать команду до~. Ояа является драйвером верхнего уровня ([гоп( еп4 для языка /ага, т.е.
интерфейсной программой компилятора до с. В /ага любой класс, имеюшнй метод ва1п ( ) является выполнимым. Это прекрасно работает с интерпретатором /УМ, когда вы указываете в командной строке при запуске программы имя класса. Но когда требуется компиляция программы в выполнимый машиной двоичный формат, то нужно указывать начальную входную точку вырабатываемой программы. Следующая команда скоипялирует и скомпонует в машинную программу исходный файл не11оиог1й. 1 ача. Опция --ва1п используется как раз для того, чтобы указать метод ва1п() класса НЕ11ОИОг1й В КаЧЕСтВЕ ВХОдНОй ТОЧКИ ПрОГраММЫ: 1 54 Часть и.
Использование Сборного Компилятора Но это послабление относится только к исполняемым файлам, содержащим машинный код. При компиляции в байт-код лля выполнения в интерпретаторе лУМ исходный файл рцЫ)с-класса должен иметь то же имя, что и определяемый в нем класс. То есть файл, содержащий определение рцбйс-класса не11оиог1йдолжен называться Не11оног1й. З ача. Компиляция отдельного исходного файла в байт-код класса виртуальной машины 3ача Возможно использовать компилятор б~П) для создания файла с суффиксом . с1авв, выполнимого в виртуальной машине 3ача (лУМ).