Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорная техника Сторожок / MPLAB_C30_Руководство пользователя.pdf
Скачиваний:
161
Добавлен:
20.02.2016
Размер:
1.26 Mб
Скачать
char.

Глава 2. Отличия 16-битового компилятора от ANSI

Это объявление y с типом, на который указывает x: typeof y (*x);

Это объявление y как массива таких величин: typeof (*x) y[4];

Это объявление y как массива указателей на символы: typeof (typeof (char *)[4]) y;

Что эквивалентно следующей традиционной декларации Cи:

char *y[4];

Для того, чтобы показать значение декларации с использованием typeof и причину,

array (pointer (char), 4) y;

почему это могло бы быть полезным способом записи, давайте перепишем ее с

этими макро:

.

A

#define pointer(T) typeof(T *)

 

#define array(T, N) typeof(T [N])

 

Теперь объявление может быть сделано следующим способом:

Wilson

 

Т.е., array (pointer (char), 4) - это тип массива из четырех указателей на

2.4.Отличия операторов

Эта секция описывает различия операторов между чистым ANSI Си и Си, принятым для компилятора. Отличияbyоператоров являются частью базовой реализации GCC, и обсуждение в секции основано на стандартной документации GCC, приспособленной для специфического синтаксиса и семантики портированного на 16-битовую архитектуру GCC компилятора.

•• МеткиTranslatedкак значения

Условные операторы с опущенными операндами

Диапазоны case

2.4.1. Метки как значения

Вы можете получить адрес метки, определенной в текущей функции (или в содержание функции) с помощью унарного оператора '&&'. Величина имеет тип void *. Это значение является константой и может использоваться везде, где допустима константа этого типа. Например:

void *ptr;

...

ptr = &&foo;

Чтобы использовать эти величины, вы должны иметь возможность перехода к ним. Это достигается благодаря вычисляемому оператору goto, goto *exp;. Например:

goto *ptr;

Здесь допустимо любое выражение типа void *.

Один способ использования таких констант состоит в инициализации статического массива, который послужит в качестве таблицы переходов:

static void *array[] = { &&foo, &&bar, &&hack };

Затем вы можете выбрать метку с помощью индексирования, подобно этому:

goto *array[i];

Примечание Проверка индекса на соответствие диапазону не производится. (Си никогда не делает этого при индексации массива.)

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. 2-21

Соседние файлы в папке Микропроцессорная техника Сторожок