Александр Микушин - Занимательно о микроконтроллерах стр 58.

Шрифт
Фон

Занимательно о микроконтроллерах

3. Специальные символы (табл. 9.3). Эти символы используются для записи вычисляемых выражений, а также для передачи компилятору определенного набора инструкций.

4. Управляющие и разделительные символы. К этой группе символов относятся: пробел, символы табуляции, перевода строки, возврата каретки, новой страницы и новой строки. Символы-разделители отделяют друг от друга лексические единицы языка, к которым относятся ключевые слова, константы, идентификаторы и т. д. Последовательность разделительных символов рассматривается компилятором как один символ (последовательность пробелов).

Александр Микушин - Занимательно о микроконтроллерах

5. Управляющие последовательности, т. е. специальные символьные комбинации, используемые в функциях ввода и вывода информации. Управляющая последовательность начинается с обратной косой черты (\), за которой следует комбинация латинских букв и цифр. Список управляющих последовательностей приведен в табл. 9.4.

Александр Микушин - Занимательно о микроконтроллерах

Управляющие последовательности \000 и \хHHH (здесь о обозначает восьмеричную цифру; н обозначает шестнадцатеричную цифру) позволяют представить символ из кодовой таблицы ASCII или ANSI как последовательность восьмеричных или шестнадцатеричных цифр соответственно.

Например, символ возврата каретки может быть представлен следующими способами:

- \r - управляющая последовательность;

- \015 - восьмеричный код символа возврата каретки;

- \x00D - шестнадцатеричный код символа возврата каретки.

Следует отметить, что в строковых константах всегда обязательно задавать все три цифры управляющей последовательности. Например, отдельную управляющую последовательность \n (переход на новую строку) можно представить как \10 или \хA, но в строковых константах необходимо задавать все три цифры, в противном случае символ или символы, следующие за управляющей последовательностью, будут рассматриваться как ее недостающая часть. Например:

"ABCDE\x009FGH"

Данная строковая команда будет напечатана с использованием определенных функций языка С, как два отдельных слова: ABCDE и FGH, - разделенные табуляцией. Если указать неполную управляющую строку ABCDE\x09FGH, то при печати появится строка ABCDE?GH, т. к. компилятор воспримет последовательность \x09F как символ?.

Отметим, что если обратная дробная черта предшествует символу, не являющемуся управляющей последовательностью (т. е. не включенному в табл. 9.4) и не являющемуся цифрой, то эта черта игнорируется, а сам символ представляется как литеральный. Например, в строковой или символьной константе символ \h представляется символом h.

Кроме определения управляющей последовательности, символ обратной дробной черты (\) используется также как символ продолжения. Если за (\) следует (\n), то оба символа игнорируются, а следующая строка является продолжением предыдущей. Это свойство может быть использовано для записи длинных строк. Например:

printf("Это очень длинная \

строка")

Если в тексте исходной программы встречается символ, отличающийся от символов, перечисленных выше, то компилятор С-51 выдает сообщение об ошибке.

Лексические единицы, разделители и использование пробелов

Наименьшей единицей операторов С-51 является лексическая единица.

Каждая из лексических единиц относится к одному из классов:

- идентификаторы;

- ключевые слова;

- простые ограничители (все специальные символы, кроме "_", являются простыми ограничителями);

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

!=, +=, -=, *=, ", >>, <=, >=, /*, */, //);

- числовые константы;

- текстовые строковые константы.

В большинстве случаев вполне очевидно, где заканчивается одна лексическая единица и начинается следующая. Например, в выражении

Х=АР*(FT-3)/А

X, AP, FT, A - являются идентификаторами переменных; 3 - числовой константой; все прочие символы - простыми ограничителями.

Ключевые слова, идентификаторы и числовые константы должны обязательно отделяться друг от друга. Если между двумя идентификаторами, числовыми константами или ключевыми словами не может быть указан простой или составной ограничитель, то в качестве разделителя между ними должен вставляться символ пробела. Для улучшения наглядности программы вместо одного может использоваться несколько символов пробела.

Идентификаторы

Идентификаторы в языке программирования С-51 используются для определения имени переменной, функции, символической константы или метки оператора. Длина идентификатора может достигать 255 символов, но транслятор различает идентификаторы только по первым 31 символам.

Возникает вопрос: а зачем тогда нужен такой длинный идентификатор?

Ответ: для создания "говорящего" имени функции или переменной, которое может состоять из нескольких слов. Например:

ProchitatPort(); //Прочитать порт

Vklychitlndikator(); //Включить индикатор

В приведенном примере функция ProchitatPort выполняет действия, необходимые для чтения порта, а функция Vklychitlndikator выполняет действия, необходимые для зажигания индикатора. Естественно, что намного легче понять, какое действие выполняет функция непосредственно из ее имени, чем заглядывать каждый раз в алгоритм программы или искать исходный текст функции, для того чтобы в очередной раз разобраться: что же она делает? Для этого при объявлении имени функции можно потратить количество символов и большее, чем 31!

То же самое можно сказать и про имена переменных. Например:

sbit ReleVklPitanija = 0x80; //К нулевому выводу порта Р0 подключено реле включения питания

sbit svDiod = 0x81; //К первому выводу порта Р0 подключен светодиод

sbit DatTemperat = 0x82; //Ко второму выводу порта Р0 подключен датчик температуры

В приведенном примере каждому выводу порта микроконтроллера назначается переменная с именем, указывающим на устройство, подключенное к этому выводу. В результате при чтении программы не потребуется обращаться к принципиальной схеме устройства каждый раз, как только производится операция записи или чтения переменной, связанной с портами микроконтроллера. (Разбираться с принципиальной схемой занятие не менее "увлекательное", чем поиск неизвестной и неизвестно что выполняющей функции.)

В качестве идентификатора может быть использована любая последовательность строчных или прописных букв латинского алфавита и цифр, а также символов подчеркивания (_). Идентификатор может начинаться только с буквы или символа "_", но ни в коем случае не с цифры. Это позволяет программе-транслятору различать идентификаторы и числовые константы. Строчные и прописные буквы в идентификаторе различаются. Например: идентификаторы abc и ABC, А128B и а128b воспринимаются как разные.

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

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

2. Следует обратить особое внимание на использование символа подчеркивания (_) в качестве первого символа идентификатора, поскольку идентификаторы, построенные таким образом, могут совпадать с именами системных функций или переменных, в результате чего они станут недоступными.

Следует отметить, что никто не запрещает объявлять идентификатор, совпадающий с именами функций из библиотек компилятора языка С. Однако после объявления такого идентификатора вы не сможете обратиться к функции с таким же именем никаким образом.

Примеры правильных идентификаторов:

А

XYR_56

OpredKonfigPriem

Byte_Prinjat

SvdiodGorit

Ключевые слова

Ключевые слова - это зарезервированные слова, которые используются для построения операторов языка.

Список ключевых слов:

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке