2845

Интерпретация составных описателей

Контрольная

Информатика, кибернетика и программирование

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

Русский

2012-10-20

36 KB

3 чел.

Интерпретация составных описателей

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

Составной описатель – это идентификатор, дополненный более чем одним признаком массива, функции или указателя.

Порядок интерпретации составных описателей.

  1.  В состав любого описателя должен входить идентификатор, он ищется на первом шаге.
  2.  Рассматриваются квадратные (признак массива) и круглые (признак функции) скобки справа от идентификатора, они имеют одинаковый приоритет и интерпретируются слева направо от окончания идентификатора
  3.  Затем справа налево рассматриваются знаки указателя, расположенные слева от идентификатора.
  4.  Интерпретируется спецификация типа идентификатора.

Для изменения порядка интерпретации можно использовать круглые скобки. Если при выполнении пункта 2 справа встречается закрывающая круглая скобка, то нужно переходить к пункту 3 для той части описателя, которая заключена между этой закрывающей круглой скобкой и соответствующей ей открывающей, а затем продолжать интерпретацию, начиная с пункта 2, но уже для объекта, заключённого в круглые скобки.

Пример 1

int (*(*v)[4])[5]

6    4  21 3    5

Идентификатор v (1) – это указатель (2) на массив (3) из 4 указателей (4) на массивы (5) из 5 чисел типа int (6).

Пример 2

float* (*f[4])(int*, char*(*)(float))

11   10 312  4 5     9         6 78

Идентификатор f (1) – это массив (2) из 4 указателей (3) на функции (4), которые принимают в качестве аргументов указатель на число типа int (5) и указатель (6) на функцию (7), принимающую в качестве аргумента переменную типа float (8) и возвращающую указатель типа char (9), и функции (4) возвращают указатели (10) типа float (11).

Описатели с модификаторами

Модификатор – специальное ключевое слово, предназначенное для изменения смысла объявления. Появление модификатора в объявлении является сигналом для компилятора интерпретировать данное объявление некоторым специальным образом. Ранее были рассмотрены модификаторы: auto, extern, register, static, long, short, signed, unsigned, near, far, huge. Рассмотрим дополнительные модификаторы: const, volatile, cdecl, pascal, interrupt. Модификаторы cdecl, pascal, interrupt применимы к функциям и модифицируют смысл их идентификаторов, поэтому должны записываться непосредственно перед идентификаторами. Модификаторы const, volatile, near, far, huge применимы к указателям (первые два применимы и к переменным и массивам, а near и far – к функциям) и воздействуют либо на идентификатор, либо на знак указателя, которому этот модификатор предшествует, и в первом случае он модифицирует объект, именованный идентификатором, а во втором – объект, на который указывает указатель. Модификаторы const и volatile могут записываться и перед спецификацией типа. Допустимо использование в объявлении более одного модификатора.

Пример 3

int const *p1;

int *const p2;

Указатель p1 – указатель на константную переменную типа int (запрещается изменять значение переменной), указатель p2 – константный указатель на переменную типа int (запрещается изменять значение указателя).

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

Модификатор const запрещает изменять значение объекта в течении всего времени выполнения программы. Компилятор проверяет все коды программы на попытки изменения объекта и при обнаружении таковых выдаёт сообщение об ошибке.

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

Возможно одновременное использование обоих модификаторов. Это означает запрет модификации значений объекта самой программой и разрешение модификации объекта внешними программами.

При применении этих модификаторов к составным объектам их действие распространяется на все компоненты этого объекта.

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

При компоновке проекта компоновщик производит сборку объектных модулей проекта (.obj) в единую исполнимую программу (.exe). Объектные модули содержат в себе машинный код, который может быть написан на любом языке программирования высокого уровня (наиболее распространённые языки – C и Pascal), и в принципе сам машинный код зависит от системы команд ЭВМ, а не от языка высокого уровня, на котором написана исходная программа. Однако в деталях существуют отличия:

  1.  Компиляторы языка C добавляют первым символом для всех идентификаторов глобальных объектов символ подчёркивания, то есть их имена в объектном и исходном модулях будут различны. Компиляторы языка Pascal задают идентификаторы глобальных объектов большими буквами и никаких символов к ним не добавляют.
  2.  Компиляторы языка C при вызовах функций их параметры заносят в стек, начиная с последнего. Компиляторы языка Pascal при вызовах функций их параметры заносят в стек, начиная с первого.

В языке Pascal функция не может иметь переменное число параметров.

Модификатор pascal вызывает следующие действия:

  1.  Модифицируемый идентификатор преобразуется к верхнему регистру и перед ним не вставляется символ подчёркивания.
  2.  Если идентификатор – имя функции, то при её вызовах запись в стек значений фактических параметров будет производиться, начиная с первого.

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

Функция main() всегда должна быть описана по правилам языка C, поэтому необходимо использовать для неё модификатор cdecl, если предполагается компиляция программы в режиме языка Pascal.

Все стандартные библиотечные функции объявлены с модификатором cdecl.

Пример 4

int pascal func1(int, float);

int cdecl main (int argc, char *argv[])

Модификатор interrupt.

Предназначен для объявления функций, работающих с векторами прерываний. Для таких функций в точках их вызова и возврата компилятор по сравнению с обычными функциями генерирует дополнительный код – программное сохранение всех регистров процессора в точке вызова и восстановление всех регистров в точке возврата. Модификатор interrupt нельзя использовать вместе с модификаторами near и far.


 

А также другие работы, которые могут Вас заинтересовать

83839. Ампутация голени и стопы. Этапы, техника операции 49.46 KB
  Второй разрез стремяобразный ведут от концов первого разреза через подошву перпендикулярно ее поверхности в глубину до пяточной кости. Дуговой пилой отливают пяточную кость сверху вниз по линии стремяобразного разреза; поврежденную часть стопы удаляют задний отрезок пяточной кости с кожей сухожилиями и сосудистонервным пучком остается в связи с мягкими тканями задней поверхности голени. Наружный край малоберцовой кости сбивают долотом или спиливают и округляют рашпилем. Опил пяточной кости прикладывают к культе большеберцовой и...
83840. Хирургическая анатомия свода и основания черепа. Виллизиев круг, синусы твёрдой мозговой оболочки, черепные нервы, оболочки головного мозга 985.14 KB
  Виллизиев круг синусы твёрдой мозговой оболочки черепные нервы оболочки головного мозга. Принято выделять три черепные ямки: переднюю от внутренней поверхности чешуи лобной кости до крыльев и площадки основной кости среднюю область пирамид височных костей заднюю от спинки турецкого седла до задних граней пирамид височных костей и борозды поперечного синуса. Оболочки головного мозга Головной мозг окружен тремя оболочками: 1 мягкой непосредственно прилежащей к его поверхности; 2 паутинной образующей узкое пространство над...
83841. Трепанация черепа. Показания, техника выполнения, осложнения. Схема кранио-церебральной топографии Кренлейна 93.22 KB
  Локализация разрезов и костного дефекта определяется локализацией патологического процесса Показания: оперативный доступ при вмешательствах по поводу операбельных опухолей головного мозга мозговых грыж водянки мозга кисты мозга и пр Техника выполнения: 1. Осложнения: Кровотечение; Инфекция; Отек головного мозга; Повреждение мозга после чего может возникнуть: Изменения в памяти поведении мышлении речи; Проблемы со зрением; Проблемы с балансом; Проблемы кишечника и мочевого пузыря; Судороги; Паралич или слабость; Реакция...
83842. Первичная хирургическая обработка ран головы 48.42 KB
  При осмотре пациента с раной головы необходимо определить: 1 ее глубину 2 наличие в ране поврежденных артериальных сосудов 3 наличие или отсутствие повреждения костей свода черепа. Наличие или отсутствие костных повреждений необходимо уточнять не только при осмотре раны но и с использованием рентгенографии черепа и компьютерной томографии головы.
83843. Хирургическая анатомия лицевого и тройничного нерва. Разрез при гнойном паротите 50.26 KB
  Хирургическая анатомия лицевого нерва Лицевой нерв смешанный. Двигательная часть начинается от ядра лицевого нерва в Варолиевом мосту. У клеток двигательного ядра имеются многочисленные чувствительные коллатерали идущие из чувствительных ядер тройничного нерва.
83844. Кровеносные сосуды лица 50.02 KB
  Артерии Верхнечелюстная артерия является одной из двухконечных ветвей наружной сонной артерии. В первом отделе следующие ветви: 1 глубокая ушная артерия разветвляется в коже наружного слухового прохода в барабанной перепонке и в капсуле височно нижнечелюстного сустава; 2 передняя барабанная артерия проникает через каменисто барабанную щель к слизистой оболочке барабанной полости; 3 нижняя альвеолярная артерия вхожи в канал нижней челюсти и отдаёт ветви к зубам и десне нижней челюсти; её конечная ветвь подбородочная артерия...
83845. Клетчаточные пространства лица. Хирургическая тактика при флегмонах лица 52.56 KB
  выше линии соединяющей углы рта. VI Клетчаточные пространства под слизистой оболочкой мышцами и органами дна полости рта: Боковые клетчаточные пространства между языком и нижней челюстью В них окруженные клетчаткой располагаются подъязычные слюнные железы с большими выводными протоками. Гнойные процессы возникающие в межмышечных клетчаточных пространствах дна полости рта могут распространятся в пределах дна полости рта. Височноязычный промежуток сообщается с жировым телом щеки крылонебной ямкой а через круглое отверстие с полостью...
83846. Хирургическая тактика при флегмонах лица 54.42 KB
  Раскрытие и дренирование флегмон скуловой области. Раскрытие и дренирование флегмон височной области. В указанной области возможно возникновение поверхностной межапоневротической подапоневротической глубокой и разлитой флегмон. Поверхностная флегмона височной области образуется между кожей и собственной височной фасцией.
83847. Подчелюстная область, треугольник Пирогова. Перевязка язычной артерии, показания, техника выполнения 48.93 KB
  В пределах подчелюстной области залегают: подчелюстная слюнная железа лицевые артерия и вена подподбородочные артерия и вена подъязычный и челюстноподъязычный нервы лимфатические узлы и клетчатка окружающая эти образования. Последняя сообщается с клетчаткой подъязычной области крыловидночелюстного окологлоточного пространств боковой области лица и шеи. Подчелюстные лимфатические узлы являются регионарными узлами челюстнолицевой области полости рта. Треугольник Пирогова Треугольное пространство в боковой части надподъязычной...