- •Содержание
- •Введение
- •1. Множества символов
- •1.1. Буквы и цифры
- •1.2. Пробельные символы
- •1.3. Знаки пунктуации и специальные символы
- •1.5. Операции
- •2. Константы
- •2.1. Целые константы
- •2.2. Константы с плавающей точкой
- •2.3. Константа-символ
- •2.4. Строковые литералы
- •3. Идентификаторы
- •4. Ключевые слова
- •5. Комментарии
- •6. Лексемы
- •7. Типы данных
- •8. Числа
- •9. Операторы
- •9.1. Оператор "выражение"
- •9.2. Пустой оператор
- •9.3. Составной оператор
- •9.4. Оператор "if"
- •9.5. Оператор "switch"
- •9.6. Операторы "break", "continue", "goto"
- •9.6.1. Оператор "break"
- •9.6.2. Оператор "continue"
- •9.6.3. Оператор "goto"
- •9.7. Оператор "for"
- •9.8. Оператор "while"
- •9.9. Оператор "do while"
- •9.10. Оператор "return"
- •9.11. Оператор "sizeof"
- •10.5. Пробелы
- •10.6. Продолжения строк
- •10.7. Длина строки
- •11. Структура программы
- •12. Псевдокод
- •13. Заголовок файла на языке си
- •14. Заголовок модуля на языке си
- •15. Ссылочная документация
5. Комментарии
Комментарий - это последовательность символов, которая воспринимается
компилятором как отдельный пробельный символ или, другими словами, игнорируется.
Комментарий имеет следующую форму представления:
/*<characters>*/
где <characters> может быть любой комбинацией символов из множества представимых
символов, включая символы новой строки, но исключая комбинацию */. Это означает,
что комментарии могут занимать более одной строки, но не могут быть вложенными.
Комментарии допускаются везде, где разрешены пробельные символы. Компилятор
игнорирует символы комментария, в частности, в комментариях допускается запись
ключевых слов и это не приведет к ошибке. Так как компилятор рассматривает
комментарий как символ пробела, то комментарии не могут появляться внутри
лексем.
6. Лексемы
Когда компилятор обрабатывает программу, он разбивает программу на группы
символов, называемых лексемами. Лексема - это единица текста программы, которая
имеет определенный смысл для компилятора и которая не может быть разбита в
дальнейшем. Операции, константы, идентификаторы и ключевые слова, описанные в
этом разделе, являются примерами лексем. Знаки пунктуации, такие как квадратные
скобки, фигурные скобки, угловые скобки, круглые скобки и запятые, также
являются лексемами. Границы лексем определяются пробельными символами и другими
лексемами, такими как операции и знаки пунктуации. Чтобы предупредить
неправильную работу компилятора, запрещаются пробельные символы между символами
идентификаторов, операциями, состоящими из нескольких символов и символами
ключевых слов.
Когда компилятор выделяет отдельную лексему, он последовательно объединяет
столько символов, сколько возможно, прежде чем перейти к обработке следующей
лексемы. Поэтому лексемы, не разделенные пробельными символами, могут быть
проинтерпретированы неверно.
Например, рассмотрим следующее выражение:
i+++j
В этом примере компилятор вначале создает из трех знаков плюс самую длинную
из возможных операций ++, а затем обработает оставшийся знак + как операцию
сложения +. Выражение проинтерпретируется как (i++)+(j), а не как (i)+(++j). В
таких случаях необходимо использовать пробельные символы или круглые скобки,
чтобы однозначно определить ситуацию.
7. Типы данных
Язык Си поддерживает определения для множества базовых типов данных,
называемых "основными" типами.
signed char float
signed int double
signed short int void
signed long int
unsigned char
unsigned int
unsigned short int
unsigned long int
Перечислимые типы также рассматриваются как основные типы
Типы signed char, signed int, signed short int и signed long int вместе с
соответствующими двойниками unsigned называются типами целых.
Спецификаторы типов float и double относятся к типу плавающих. В объявлениях
переменных и функций можно использовать любые спецификаторы целый и плавающий.
Тип void может быть использован только для объявления функций, которые не
возвращают значения.
Можно задать дополнительные спецификаторы типа путем объявления typedef.
При записи спецификаторов типов допустимы сокращения. В целых типах ключевое
слово signed может быть опущено. Так, если ключевое слово unsigned опускается в
записи спецификатора типа, то тип целого будет знаковым, даже если опущено
ключевое слово signed.
