Язык С

       

Hачинаем


Единственный способ освоить новый язык программирования - писать на нем программы. Первая програм- ма, которая должна быть написана, - одна для всех языков: напечатать слова : HELLO, WORLD. Это - самый существенный барьер; чтобы преодолеть его, вы должны суметь завести где-то текст программы, успешно его скомпилировать, загрузить, прогнать и найти, где оказалась ваша выдача. Если вы научились справляться с этими техничес- кими деталями, все остальное сравнительно просто.

Программа печати "HELLO, WORLD" на языке "C" имеет вид:

MAIN () { PRINTF("HELLO, WORLD\N"); } Как пропустить эту программу - зависит от используемой вами системы. В частности, на операционной системе "UNIX" вы должны завести исходную программу в файле, имя которого оканчивается на ".C" , например, HELLO.C , и затем скомпили- ровать ее по команде

CC HELLO.C

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

A.OUT

приведет к выводу

HELLO, WORLD

На других системах эти правила будут иными; проконсуль- тируйтесь с местным авторитетом.

Упражнение 1-1

--------------- Пропустите эту программу на вашей системе. Попробуйте не включать различные части программы и посмотрите какие со- общения об ошибках вы при этом получите. Теперь некоторые пояснения к самой программе. Любая "C"-программа, каков бы ни был ее размер, состоит из одной или более "функций", указывающих фактические операции компьютера, которые должны быть выполнены. Функции в языке "C" подобны функциям и подпрограммам фортрана и процедурам PL/1, паскаля и т.д. В нашем примере такой функцией является MAIN. Обычно вы можете давать функциям любые имена по вашему усмотрению, но MAIN - это особое имя; выполнение вашей прог- раммы начинается сначала с функции MAIN. Это означает, что каждая программа должна в каком-то месте содержать функцию с именем MAIN. Для выполнения определенных действий функция MAIN обычно обращается к другим функциям, часть из которых находится в той же самой программе, а часть - в библиотеках, содержащих ранее написанные функции.


Одним способом обмена данными между функциями является передача посредством аргументов. Круглые скобки, следующие за именем функции, заключают в себе список аргументов; здесь маIN - функция без аргументов, что указывается как (). Опе- раторы, составляющие функцию, заключаются в фигурные скобки { и }, которые аналогичны DO-END в PL/1 или BEGIN-END в ал- голе, паскале и т.д. Обращение к функции осуществляется ука- занием ее имени, за которым следует заключенный в круглые скобки список аргументов. здесь нет никаких операторов CALL, как в фортране или PL/1. Круглые скобки должны присутство- вать и в том случае, когда функция не имеет аргументов. Строка

PRINTF("HELLO, WORLD\N");

является обращением к функции, которое вызывает функцию с именем PRINTF и аргуметом "HELLO, WORLD\N". Функция PRINTF является библиотечной функцией, которая выдает выходные дан- ные на терминал (если только не указано какое-то другое мес- то назначения). В данном случае печатается строка символов, являющаяся аргументом функции. Последовательность из любого количества символов, зак- люченных в удвоенные кавычки "...", называется 'символьной строкой' или 'строчной константой'. Пока мы будем использо- вать символьные строки только в качестве аргументов для PRINTF и других функций. Последовательность \N в приведенной строке является обозначением на языке "C" для 'символа новой строки', кото- рый служит указанием для перехода на терминале к левому краю следующей строки. Если вы не включите \N (полезный экспери- мент), то обнаружите, что ваша выдача не закончится перехо- дом терминала на новую строку. Использование последователь- ности \N - единственный способ введения символа новой строки в аргумент функции PRINTF; если вы попробуете что-нибудь вроде

PRINTF("HELLO, WORLD ");

то "C"-компилятор будет печатать злорадные диагностические сообщения о недостающих кавычках. Функция PRINTF не обеспечивает автоматического перехода на новую строку, так что многократное обращение к ней можно использовать для поэтапной сборки выходной строки. Наша пер- вая программа, печатающая идентичную выдачу, с точно таким же успехом могла бы быть написана в виде

MAIN() { PRINTF("HELLO, "); PRINTF("WORLD"); PRINTF("\N"); } Подчеркнем, что \N представляет только один символ. Ус- ловные 'последовательности', подобные \N , дают общий и до- пускающий расширение механизм для представления трудных для печати или невидимых символов. Среди прочих символов в языке "C" предусмотрены следующие: \т - для табуляции, \B - для возврата на одну позицию, \" - для двойной кавычки и \\ для самой обратной косой черты.

Упражнение 1-2

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




    Содержание раздела