|
Программирование >> Перегруженные имена функций и идентификаторы
декларатор уже полностью проинтерпретирован. Можно использовать круглые скобки, чтобы изменить порядок интерпретации на необходимый в данном случае. При интерпретации составных деклараторов может быть предложено простое правило, которое читается следующим образом: изнутри-наружу . Нужно начать с идентификатора и посмотреть вправо, есть ли квадратные ии круглые скобки. Если они есть, то проинтерпретировать эту часть декларатора, затем посмотреть налево, если ли звездочка. Если на любой стадии справа встретится закрывающая круглая скобка, то вначале необходимо применить все эти правила внутри круглых скобок, а затем продолжить интерпретацию. На последнем шаге интерпретируется спецификатор типа. В следующем примере проиллюстрированы эти правила. Последовательность шагов при интерпретации перенумерована. Деклараторы со специальными ключевыми словами Можно использовать следующие специальные ключевые слова: cdecl far fortran huge near pascal Эти ключевые слова используются для изменения смысла объявлений переменной и функции. Когда специальное ключевое слово встречается в деклараторе, то оно модифицирует объект, расположенный справа от ключевого слова. Допускается более одного ключевого слова, модифицирующего объект. Например, идентификатор функции может быть модифицирован двумя ключевыми словами far и pascal. Порядок ключевых слов в этом случае не важен, то есть far pascal и pascal far имеют один и тот же смысл. В различных частях объявления могут быть использованы два или более ключевых слов для модификации смысла составляющих частей объявления. Например, в следующем объявлении содержится в различных местах два ключевых слова far и ключевое слово pascal: int far * pascal far func(void); Идентификатор функции func модифицируется ключевыми словами pascal и far. func возвращает величину, объявленную как far-указатель на величину типа int. Как и прежде в любом объявлении могут быть использованы круглые скобки для изменения порядка интерпретации. Правила интерпретации составных объявлений со специальными ключевыми словами остаются теми же, что и без них. В следующих примерах показано использование специальных ключевых слов в объявлениях. Example 1 int huge database[65000]; Example 2 char * far * x; Example 3 double near cdecl calc(double,double); double cdecl near calc(double,double); Example 4 char far fortran initlist[INITSIZE]; char far *nextchar, far *prevchar, far *currentchar; Example 5 char far *(far *getint) (int far *); 6 5 2134 В первом примере объявляется массив huge, поименованный database, содержащий 65000 элементов типа int. Декларатор массива модифицируется ключевым словом huge. Во втором примере ключевое слово far модифицирует расположенную справа звездочку, делая x far-указателем на указатель к величине типа char. Это объявление эквивалентно и такой записи: char * (far *x); В третьем примере показано два эквивалентных объявления. Оба объявляют calc как функции с near и cdecl атрибутами. В четвертом примере также представлено два объявления: первое объявляет far fortan-массив символов, поименованный initlist, а второе объявляет три far-указателя, поименованные nexchar, prevchar и currentchar. Указатели могут быть использованы для запоминания адресов символов массива initlist. Заметим, что ключевое слово far должно быть повторено перед каждым декларатором. В пятом примере показано более сложное объявление с различными случаями расположения ключевого слова far. Интерпретация этого объявления состоит из следующих шагов: 1. Идентификатор getint объявляется как 2. far-указатель на 3. функцию, требующую 4. один аргумент, который является far-указателем на величину типа int 5. и возвращающую far- указатель на 6. величину типа char Заметим, что ключевое слово far всегда модифицирует объект, который следует справа. Объявления переменной Объявление простой переменной Синтаксис: <type-specifier><identifier>[,<identifier>...]; Объявление простой переменной определяет имя переменной и ее тип; оно может также определять класс памяти переменной. Имя переменной - это идентификатор, заданный в объявлении. Спецификатор типа type-specifier задает имя определяемого типа данных. Можно определить имена различных переменных в том же самом объявлении, задавая список идентификаторов, разделенных запятой. Каждый идентификатор списка именует переменную. Все переменные, заданные в объявлении, имеют один и тот же тип. Примеры: int x; /* Example 1 */ unsigned long reply, flag /* Example 2 */
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |