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.


 

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

52456. National cuisine 532 KB
  Tody we continue to discuss different questions nd fcts bout mels nd food. ll living things need food becuse it is the bsic fuel of our life. Wht food is very good for us Which of the foods re not so good for us nd wht food cn even cuse illnesses Write list of 15 best nd 15 worst foods. Nowdys in spoken English you my often come cross such phrse s junk food.
52457. Cultural Development of Young People 45 KB
  Der friends Tody t the lesson well try to revel the notion âCulturl development of young peopleâ.: I think Ill be doctor becuse its n importnt nd necessry profession which helps people to keep in good helth. Pupils brinstorm their ides nd come to the conclusion tht â culturl developmentâ includes the following things: eduction upbringing socil surroundings trditions the wy we tret other people the wy we work nd study the wy we dress...
52458. We and the English-speaking world. Comparing cultures 139.5 KB
  Guests: investors from Germny representtives of school dminist rtion correspondents from locl mss medi techers of the lyceum. Im gld to introduce you our guests from Germny Peter Freundlieb nd Julius Zitsek. nd I hope our guests from Germny will help us wont they The guests introduce themselves nd tell some words bout their country nd their mission in Ukrine. I think they will explin us the reson: boy nd girl worn in ntionl Ukrinin costumes hnd in the Germn guests bred nd slt on the ntionl Ukrinin towel nd spek bout Ukrinin...
52459. CYBERBULLYING 102 KB
  Techer: Good fternoon der pupils nd our guests We re hppy to greet you t our prty devoted to Interntionl Dy for Tolernce nd problems of cyberbullying. Presenter 1: Tody were going to tlk bout bullying. Bullying occurs in every country round the globe when people especilly children ren't tolernt of ech other.
52461. ВІТАННЯ ВІД СВІТЛОФОРЧИКА 53.5 KB
  Учителька бабуся. Учителька бабуся. Ура Учителька бабуся. О а навіщо нам ці правила Що ми шофери чи що Учителька бабуся.
52462. Дальтон-технологія 109 KB
  Серед інноваційних технологій яка саме дозволяє здійснити такий підхід до навчання відома дальтонтехнологія. Дальтонтехнологія один із методів активізації пізнавальної та креативної діяльності учнів при вивченні предмету. У дальтонтехнології закладені великі можливості для реалізації особистісноорієнтованого навчання в повнішій мірі навіть в умовах класноурочної системи.
52463. Галицько- Волинська держава. Данило Галицький 110.78 KB
  Мета: ознайомити учнів з виникненням Галицько Волинської держави; на прикладах особистостей Романа Великого та Данила Галицького продовжити формування вмінь складати характеристику видатних історичних діячів; виховувати почуття гордості за славне минуле свого народу повагу до історичних діячів. Обладнання: підручник карта Галицько Волинська держава портрети Романа і Данила зошит Власова роздатковий матеріал схеми таблиці вислови речення. ' Основні поняття і терміни: Галицько Волинська...
52464. American Holidays. Thanksgiving Day 338 KB
  The pilgrims celebrted the first Thnksgiving Dy in the fll of 1621. The pilgrims siled to meric from Plymouth Englnd in September 1620. Wht joy the pilgrims hd when they relized where they were There were people living in meric before the pilgrims rrived. The pilgrims first winter in the New World ws difficult.