Основные операторы языка
Операторы препроцессора могут появляться в любом месте программы и их действие распространяется на весь исходный файл. Весьма часто используются следующие операторы препроцессора: #1пс1ис1е Важная возможность препроцессора — включение в исходный текст содержимого других файлов. Эта возможность в основном используется для того, чтобы снабжать программы какими-то общими для всех данными определениями. Например, чрезвычайно часто в начале программы на языке Си встречается препроцес- сорная конструкция #1пс1ис1е < 5-ЬсНо.Ъ>; Когда исходный текст программы обрабатывается препроцессором, на место этой инструкции ставится содержимое расположенного в некоем стандартном месте (каталоге ШСШЭЕ) файла з^сНо. Ъ, содержащего макроопределения и объявления данных, необходимых/для работы функций из стандартной библиотеки ввода-вывода. Директива #йеГше позволяет дать в программе макроопределения (или задать макросы). Оператор макроопределения имеет вид: #с1е^1пе < макроимя> Сстрока лексем> или #с! е^1пе < макроимя (Ссписок параметров>) > Сстрока лексем> Макроимя — идентификатор. Строка лексем — последовательность лексем от Макроимени до конца строки. Точка с запятой в конце макроопределения не ставится. Препроцессорная обработка макроопределения сводится к тому, что любое появление Макроимени (макровызов) в качестве отдельной лексемы в тексте программы, расположенном после макроопределения, ведет к замене этого Макроимени на указанную Строку лексем. Оператор присваивания имеет общий вид < Имя переменной> = < Выражение>; В языке Си разрешается включать присваивания в выражения, то есть присваивание может рассматриваться как операция с учетом старшинства и влияния скобок. В языке Си имеются специальные операции += -= *= /= %= для компактной записи операторов присваивания. Так, следующие две записи на языке Си эквивалентны: 1=1+2 и 1+=2. Операция присваивания сама по себе имеет значение (равное значению выражения, стоящего справа от знака «=») и может входить в выражения. Оператор ±^/е1зе имеет вид И (< выражение>) Соператор1> е1зе < оператор2>; Здесь часть е1зе < оператор2> является необязательной, можно применять и одиночный оператор (< выражение>) < оператор1>; Вначале вычисляется значение выражения. Оператор1 выполняется, если значение выражения истинно. Если выражение ложно (его значение равно нулю) и если есть часть с е1зе, то выполняется оператор2. При программировании требуется аккуратно различать знаки = и ==, потому что в ряде случаев компилятор не сможет обнаружить ошибки, связанной с неправильным использованием знаков этих операций, что приведет к неверным результатам. В языке Си имеется компактный способ записи оператора 1^/е1зе. Он называется «условным выражением» или «тернарной операцией». Такое выражение выглядит так: В1? В2: ВЗ Сначала вычисляется значение выражения В1. Если оно отлично от нуля (истинно), то вычисляется значение выражения В2, которое и становится значением условного выражения. В противном случае вычисляется значение выражения ВЗ, и оно становится значением условного выражения. Условное выражение удобно использовать в тех случаях, когда имеется некоторая переменная, которой можно присвоить одно из двух возможных значений. Типичным примером являются присваивание переменной значения большей из двух величин: шах= (а> Ъ)? а: Ъ; Оператор-переключатель зуп±ЬсЪ удобен в тех случаях, когда в программе необходимо произвести выбор одного из нескольких вариантов. Его синтаксис: змИ: сЪ. (< выражение>) { сазе < константа1>: Ссписок операторов1>; сазе < константа2>: Ссписок операторов2>; сазе < константаЫ>: Ссписок операторовЫ>; с! е: Еаи11:: Ссписок операторов>; } Оператор-переключатель выполняется следующим образом. Вычисляется значение выражения в скобках, приведенного после ключевого слова з^л^сЬ, затем программа просматривает список меток, указанных после слов са$е, до тех пор, пока не находит ту, которая соответствует данному значению. Далее программа переходит к выполнению оператора, расположенного в этой строке. Если подходящей метки не найдется и если существует строка с меткой с! е: Еаи11::, то будет выполняться оператор, помеченный этой меткой. В противном случае произойдет переход к оператору, расположенному за оператором змИ: сЪ.
|