Язык программирования Си

       

Язык программирования Си

Данное руководство описывает язык программирования Си, определенный 31 октября 1989 г. в соответствии с проектом, утвержденным в ANSI в качестве Американского национального стандарта для информационных систем: Язык программирования Си, X3.159-1989 ("American National Standard for Information Systems - Programming Language C, X3.159-1989"). Это описание - лишь один из вариантов предлагаемого стандарта, а не сам стандарт, однако мы специально заботились о том, чтобы сделать его надежным руководством по языку.
Настоящий документ в основном следует общей схеме описания, принятой в стандарте (публикация которого в свою очередь основывалась на первом издании этой книги), однако в организационном плане есть различия. Если не считать отклонений в названиях нескольких продуктов и отсутствия формальных определений лексем и препроцессора, грамматика языка здесь и грамматика в стандарте эквивалентны.

Язык С
Язык "C" является универсальным языком программирования. Он тесно связан с операционной системой "UNIX" , так как был развит на этой системе и так как "UNIX" и ее программное обеспечение написано на "C". Сам язык , однако, не связан с какой-либо одной операционной системой или машиной; и хотя его называют языком системного программирования, так как он удобен для написания операционных систем, он с равным успехом использовался при написании больших вычислительных программ, программ для обработки текстов и баз данных. Язык "C" - это язык относительно "низкого уровня".

Идентификаторы (имена)
Идентификатор - это последовательность букв и цифр; пер- вый символ должен быть буквой. Подчеркивание _ считается буквой. Буквы нижнего и верхнего регистров различаются. зна- чащими являются не более, чем первые восемь символов, хотя можно использовать и больше. На внешние идентификаторы, ко- торые используются различными ассемблерами и загрузчиками, накладыватся более жесткие ограничения

С для профессиональных программистов
Одна из наиболее очевидных черт профессионально написанных программ - это использование исчезающих и иерархических меню. При правильном использовании, эти меню дают программам дружелюбие, которое пользователи от них и ожидают. Хотя по существу и простые, и исчезающие, и иерархические меню представляют некоторые трудности в программировании.

Синтаксический разбор выражений


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

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

Рекурсивные вызовы
Любая функция в Си-программе может быть вызвана рекурсивно; в частности, она может вызвать сама себя. Компилятор не ограничивает число рекурсивных вызовов одной функции. При каждом вызове новые ячейки памяти выделяются для формальных параметров и локальных переменных класса памяти auto и register, так что их значения в предшествующих, незавершенных вызовах недоступны и не портятся.

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

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

Символ, строка и целый тип
Язык С имеет относительно немного основных типов. В выражениях могут свободно перемешиваться операнды разных типов. Тип результата выражения будет определяться некоторыми простыми правилами преобразования основных типов (иерархией простых типов). Эта иерархия приведена на схеме

Включение файлов
Макроопределение PRINT1 показывает некоторую особенность препроцессора, которая часто приводит к неприятностям. Если определяемое имя встречается внутри строки, т.е. между двумя двойными кавычками, то оно не заменяется. Однако, аргументы макроопределения будут заменяться всюду, где бы они не встретились, даже внутри строки. Обратите внимание, что макроопределение PR использует это свойство препроцессора.

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

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

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

Ссылки и массивы
В течение долгого времени программисты всячески поносили ссылки, и в работах, посвященных стилю программирования, к ним относятся враждебно. В частности, применение ссылок критикуется из-за того, что в силу их природы, невозможно определить, на что указывает в данный момент ссылка, если не возвращаться к тому месту, где ссылке в последний раз было присвоено значение. Это усложняет программу и делает доказательство ее правильности более трудным.

Простые записи, вложенные записи
Запись, т.е. тип данных struct, - основной строительный блок данных в языке С. Она представляет собой удобный способ объединения различных элементов, связанных между собой.

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

Таблица приоритетов
Таблица приоритетов показывает относительный приоритет операций. Приоритет определяет порядок, в котором операции сопоставляются с операндами. Операции получают свои операнды в порядке убывания приоритетов.

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

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